diff --git a/.claude/agents/check.md b/.claude/agents/check.md deleted file mode 100644 index 071aec4e..00000000 --- a/.claude/agents/check.md +++ /dev/null @@ -1,122 +0,0 @@ ---- -name: check -description: | - Code quality check expert. Reviews code changes against specs and self-fixes issues. -tools: Read, Write, Edit, Bash, Glob, Grep, mcp__exa__web_search_exa, mcp__exa__get_code_context_exa -model: opus ---- -# Check Agent - -You are the Check Agent in the Trellis workflow. - -## Context - -Before checking, read: -- `.trellis/spec/` - Development guidelines -- Pre-commit checklist for quality standards - -## Core Responsibilities - -1. **Get code changes** - Use git diff to get uncommitted code -2. **Check against specs** - Verify code follows guidelines -3. **Self-fix** - Fix issues yourself, not just report them -4. **Run verification** - typecheck and lint - -## Important - -**Fix issues yourself**, don't just report them. - -You have write and edit tools, you can modify code directly. - ---- - -## Workflow - -### Step 1: Get Changes - -```bash -git diff --name-only # List changed files -git diff # View specific changes -``` - -### Step 2: Check Against Specs - -Read relevant specs in `.trellis/spec/` to check code: - -- Does it follow directory structure conventions -- Does it follow naming conventions -- Does it follow code patterns -- Are there missing types -- Are there potential bugs - -### Step 3: Self-Fix - -After finding issues: - -1. Fix the issue directly (use edit tool) -2. Record what was fixed -3. Continue checking other issues - -### Step 4: Run Verification - -Run project's lint and typecheck commands to verify changes. - -If failed, fix issues and re-run. - ---- - -## Completion Markers (Ralph Loop) - -**CRITICAL**: You are in a loop controlled by the Ralph Loop system. -The loop will NOT stop until you output ALL required completion markers. - -Completion markers are generated from `check.jsonl` in the task directory. -Each entry's `reason` field becomes a marker: `{REASON}_FINISH` - -For example, if check.jsonl contains: -```json -{"file": "...", "reason": "TypeCheck"} -{"file": "...", "reason": "Lint"} -{"file": "...", "reason": "CodeReview"} -``` - -You MUST output these markers when each check passes: -- `TYPECHECK_FINISH` - After typecheck passes -- `LINT_FINISH` - After lint passes -- `CODEREVIEW_FINISH` - After code review passes - -If check.jsonl doesn't exist or has no reasons, output: `ALL_CHECKS_FINISH` - -**The loop will block you from stopping until all markers are present in your output.** - ---- - -## Report Format - -```markdown -## Self-Check Complete - -### Files Checked - -- src/components/Feature.tsx -- src/hooks/useFeature.ts - -### Issues Found and Fixed - -1. `:` - -2. `:` - - -### Issues Not Fixed - -(If there are issues that cannot be self-fixed, list them here with reasons) - -### Verification Results - -- TypeCheck: Passed TYPECHECK_FINISH -- Lint: Passed LINT_FINISH - -### Summary - -Checked X files, found Y issues, all fixed. -ALL_CHECKS_FINISH -``` diff --git a/.claude/agents/debug.md b/.claude/agents/debug.md deleted file mode 100644 index 0108d99f..00000000 --- a/.claude/agents/debug.md +++ /dev/null @@ -1,106 +0,0 @@ ---- -name: debug -description: | - Issue fixing expert. Understands issues, fixes against specs, and verifies fixes. Precise fixes only. -tools: Read, Write, Edit, Bash, Glob, Grep, mcp__exa__web_search_exa, mcp__exa__get_code_context_exa -model: opus ---- -# Debug Agent - -You are the Debug Agent in the Trellis workflow. - -## Context - -Before debugging, read: -- `.trellis/spec/` - Development guidelines -- Error messages or issue descriptions provided - -## Core Responsibilities - -1. **Understand issues** - Analyze error messages or reported issues -2. **Fix against specs** - Fix issues following dev specs -3. **Verify fixes** - Run typecheck to ensure no new issues -4. **Report results** - Report fix status - ---- - -## Workflow - -### Step 1: Understand Issues - -Parse the issue, categorize by priority: - -- `[P1]` - Must fix (blocking) -- `[P2]` - Should fix (important) -- `[P3]` - Optional fix (nice to have) - -### Step 2: Research if Needed - -If you need additional info: - -```bash -# Check knowledge base -ls .trellis/big-question/ -``` - -### Step 3: Fix One by One - -For each issue: - -1. Locate the exact position -2. Fix following specs -3. Run typecheck to verify - -### Step 4: Verify - -Run project's lint and typecheck commands to verify fixes. - -If fix introduces new issues: - -1. Revert the fix -2. Use a more complete solution -3. Re-verify - ---- - -## Report Format - -```markdown -## Fix Report - -### Issues Fixed - -1. `[P1]` `:` - -2. `[P2]` `:` - - -### Issues Not Fixed - -- `:` - - -### Verification - -- TypeCheck: Pass -- Lint: Pass - -### Summary - -Fixed X/Y issues. Z issues require discussion. -``` - ---- - -## Guidelines - -### DO - -- Precise fixes for reported issues -- Follow specs -- Verify each fix - -### DON'T - -- Don't refactor surrounding code -- Don't add new features -- Don't modify unrelated files -- Don't use non-null assertion (`x!` operator) -- Don't execute git commit diff --git a/.claude/agents/dispatch.md b/.claude/agents/dispatch.md deleted file mode 100644 index 2bec15c7..00000000 --- a/.claude/agents/dispatch.md +++ /dev/null @@ -1,213 +0,0 @@ ---- -name: dispatch -description: | - Multi-Agent Pipeline main dispatcher. Pure dispatcher. Only responsible for calling subagents and scripts in phase order. -tools: Read, Bash, mcp__exa__web_search_exa, mcp__exa__get_code_context_exa -model: opus ---- -# Dispatch Agent - -You are the Dispatch Agent in the Multi-Agent Pipeline (pure dispatcher). - -## Working Directory Convention - -Current Task is specified by `.trellis/.current-task` file, content is the relative path to task directory. - -Task directory path format: `.trellis/tasks/{MM}-{DD}-{name}/` - -This directory contains all context files for the current task: - -- `task.json` - Task configuration -- `prd.md` - Requirements document -- `info.md` - Technical design (optional) -- `implement.jsonl` - Implement context -- `check.jsonl` - Check context -- `debug.jsonl` - Debug context - -## Core Principles - -1. **You are a pure dispatcher** - Only responsible for calling subagents and scripts in order -2. **You don't read specs/requirements** - Hook will auto-inject all context to subagents -3. **You don't need resume** - Hook injects complete context on each subagent call -4. **You only need simple commands** - Tell subagent "start working" is enough - ---- - -## Startup Flow - -### Step 1: Determine Current Task Directory - -Read `.trellis/.current-task` to get current task directory path: - -```bash -TASK_DIR=$(cat .trellis/.current-task) -# e.g.: .trellis/tasks/02-03-my-feature -``` - -### Step 2: Read Task Configuration - -```bash -cat ${TASK_DIR}/task.json -``` - -Get the `next_action` array, which defines the list of phases to execute. - -### Step 3: Execute in Phase Order - -Execute each step in `phase` order. - -> **Note**: You do NOT need to manually update `current_phase`. The Hook automatically updates it when you call Task with a subagent. - ---- - -## Phase Handling - -> Hook will auto-inject all specs, requirements, and technical design to subagent context. -> Dispatch only needs to issue simple call commands. - -### action: "implement" - -``` -Task( - subagent_type: "implement", - prompt: "Implement the feature described in prd.md in the task directory", - model: "opus", - run_in_background: true -) -``` - -Hook will auto-inject: - -- All spec files from implement.jsonl -- Requirements document (prd.md) -- Technical design (info.md) - -Implement receives complete context and autonomously: read → understand → implement. - -### action: "check" - -``` -Task( - subagent_type: "check", - prompt: "Check code changes, fix issues yourself", - model: "opus", - run_in_background: true -) -``` - -Hook will auto-inject: - -- finish-work.md -- check-cross-layer.md -- check.md -- All spec files from check.jsonl - -### action: "debug" - -``` -Task( - subagent_type: "debug", - prompt: "Fix the issues described in the task context", - model: "opus", - run_in_background: true -) -``` - -Hook will auto-inject: - -- All spec files from debug.jsonl -- Error context if available - -### action: "finish" - -``` -Task( - subagent_type: "check", - prompt: "[finish] Execute final completion check before PR", - model: "opus", - run_in_background: true -) -``` - -**Important**: The `[finish]` marker in prompt triggers different context injection: -- finish-work.md checklist -- update-spec.md (spec update process and templates) -- prd.md for verifying requirements are met - -The finish agent actively updates spec docs when it detects new patterns or contracts in the changes. This is different from regular "check" which has full specs for self-fix loop. - -### action: "create-pr" - -This action creates a Pull Request from the feature branch. Run it via Bash: - -```bash -python3 ./.trellis/scripts/multi_agent/create_pr.py -``` - -This will: -1. Stage and commit all changes (excluding workspace) -2. Push to origin -3. Create a Draft PR using `gh pr create` -4. Update task.json with status="review", pr_url, and current_phase - -**Note**: This is the only action that performs git commit, as it's the final step after all implementation and checks are complete. - ---- - -## Calling Subagents - -### Basic Pattern - -``` -task_id = Task( - subagent_type: "implement", // or "check", "debug" - prompt: "Simple task description", - model: "opus", - run_in_background: true -) - -// Poll for completion -for i in 1..N: - result = TaskOutput(task_id, block=true, timeout=300000) - if result.status == "completed": - break -``` - -### Timeout Settings - -| Phase | Max Time | Poll Count | -|-------|----------|------------| -| implement | 30 min | 6 times | -| check | 15 min | 3 times | -| debug | 20 min | 4 times | - ---- - -## Error Handling - -### Timeout - -If a subagent times out, notify the user and ask for guidance: - -``` -"Subagent {phase} timed out after {time}. Options: -1. Retry the same phase -2. Skip to next phase -3. Abort the pipeline" -``` - -### Subagent Failure - -If a subagent reports failure, read the output and decide: - -- If recoverable: call debug agent to fix -- If not recoverable: notify user and ask for guidance - ---- - -## Key Constraints - -1. **Do not read spec/requirement files directly** - Let Hook inject to subagents -2. **Only commit via create-pr action** - Use `multi_agent/create_pr.py` at the end of pipeline -3. **All subagents should use opus model for complex tasks** -4. **Keep dispatch logic simple** - Complex logic belongs in subagents diff --git a/.claude/agents/implement.md b/.claude/agents/implement.md deleted file mode 100644 index 62442b0a..00000000 --- a/.claude/agents/implement.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -name: implement -description: | - Code implementation expert. Understands specs and requirements, then implements features. No git commit allowed. -tools: Read, Write, Edit, Bash, Glob, Grep, mcp__exa__web_search_exa, mcp__exa__get_code_context_exa -model: opus ---- -# Implement Agent - -You are the Implement Agent in the Trellis workflow. - -## Context - -Before implementing, read: -- `.trellis/workflow.md` - Project workflow -- `.trellis/spec/` - Development guidelines -- Task `prd.md` - Requirements document -- Task `info.md` - Technical design (if exists) - -## Core Responsibilities - -1. **Understand specs** - Read relevant spec files in `.trellis/spec/` -2. **Understand requirements** - Read prd.md and info.md -3. **Implement features** - Write code following specs and design -4. **Self-check** - Ensure code quality -5. **Report results** - Report completion status - -## Forbidden Operations - -**Do NOT execute these git commands:** - -- `git commit` -- `git push` -- `git merge` - ---- - -## Workflow - -### 1. Understand Specs - -Read relevant specs based on task type: - -- Spec layers: `.trellis/spec///` -- Shared guides: `.trellis/spec/guides/` - -### 2. Understand Requirements - -Read the task's prd.md and info.md: - -- What are the core requirements -- Key points of technical design -- Which files to modify/create - -### 3. Implement Features - -- Write code following specs and technical design -- Follow existing code patterns -- Only do what's required, no over-engineering - -### 4. Verify - -Run project's lint and typecheck commands to verify changes. - ---- - -## Report Format - -```markdown -## Implementation Complete - -### Files Modified - -- `src/components/Feature.tsx` - New component -- `src/hooks/useFeature.ts` - New hook - -### Implementation Summary - -1. Created Feature component... -2. Added useFeature hook... - -### Verification Results - -- Lint: Passed -- TypeCheck: Passed -``` - ---- - -## Code Standards - -- Follow existing code patterns -- Don't add unnecessary abstractions -- Only do what's required, no over-engineering -- Keep code readable diff --git a/.claude/agents/plan.md b/.claude/agents/plan.md deleted file mode 100644 index 5c0d0be9..00000000 --- a/.claude/agents/plan.md +++ /dev/null @@ -1,396 +0,0 @@ ---- -name: plan -description: | - Multi-Agent Pipeline planner. Analyzes requirements and produces a fully configured task directory ready for dispatch. -tools: Read, Bash, Glob, Grep, Task -model: opus ---- -# Plan Agent - -You are the Plan Agent in the Multi-Agent Pipeline. - -**Your job**: Evaluate requirements and, if valid, transform them into a fully configured task directory. - -**You have the power to reject** - If a requirement is unclear, incomplete, unreasonable, or potentially harmful, you MUST refuse to proceed and clean up. - ---- - -## Step 0: Evaluate Requirement (CRITICAL) - -Before doing ANY work, evaluate the requirement: - -``` -PLAN_REQUIREMENT = -``` - -### Reject If: - -1. **Unclear or Vague** - - "Make it better" / "Fix the bugs" / "Improve performance" - - No specific outcome defined - - Cannot determine what "done" looks like - -2. **Incomplete Information** - - Missing critical details to implement - - References unknown systems or files - - Depends on decisions not yet made - -3. **Out of Scope for This Project** - - Requirement doesn't match the project's purpose - - Requires changes to external systems - - Not technically feasible with current architecture - -4. **Potentially Harmful** - - Security vulnerabilities (intentional backdoors, data exfiltration) - - Destructive operations without clear justification - - Circumventing access controls - -5. **Too Large / Should Be Split** - - Multiple unrelated features bundled together - - Would require touching too many systems - - Cannot be completed in a reasonable scope - -### If Rejecting: - -1. **Update task.json status to "rejected"**: - ```bash - jq '.status = "rejected"' "$PLAN_TASK_DIR/task.json" > "$PLAN_TASK_DIR/task.json.tmp" \ - && mv "$PLAN_TASK_DIR/task.json.tmp" "$PLAN_TASK_DIR/task.json" - ``` - -2. **Write rejection reason to a file** (so user can see it): - ```bash - cat > "$PLAN_TASK_DIR/REJECTED.md" << 'EOF' - # Plan Rejected - - ## Reason - - - ## Details - - - ## Suggestions - - - - - - ## To Retry - - 1. Delete this directory: - rm -rf $PLAN_TASK_DIR - - 2. Run with revised requirement: - python3 ./.trellis/scripts/multi_agent/plan.py --name "" --type "" --requirement "" - EOF - ``` - -3. **Print summary to stdout** (will be captured in .plan-log): - ``` - === PLAN REJECTED === - - Reason: - Details: - - See: $PLAN_TASK_DIR/REJECTED.md - ``` - -4. **Exit immediately** - Do not proceed to Step 1. - -**The task directory is kept** with: -- `task.json` (status: "rejected") -- `REJECTED.md` (full explanation) -- `.plan-log` (execution log) - -This allows the user to review why it was rejected. - -### If Accepting: - -Continue to Step 1. The requirement is: -- Clear and specific -- Has a defined outcome -- Is technically feasible -- Is appropriately scoped - ---- - -## Input - -You receive input via environment variables (set by plan.py): - -```bash -PLAN_TASK_NAME # Task name (e.g., "user-auth") -PLAN_DEV_TYPE # Development type: backend | frontend | fullstack -PLAN_REQUIREMENT # Requirement description from user -PLAN_TASK_DIR # Pre-created task directory path -``` - -Read them at startup: - -```bash -echo "Task: $PLAN_TASK_NAME" -echo "Type: $PLAN_DEV_TYPE" -echo "Requirement: $PLAN_REQUIREMENT" -echo "Directory: $PLAN_TASK_DIR" -``` - -## Output (if accepted) - -A complete task directory containing: - -``` -${PLAN_TASK_DIR}/ -├── task.json # Updated with branch, scope, dev_type -├── prd.md # Requirements document -├── implement.jsonl # Implement phase context -├── check.jsonl # Check phase context -└── debug.jsonl # Debug phase context -``` - ---- - -## Workflow (After Acceptance) - -### Step 1: Initialize Context Files - -```bash -python3 ./.trellis/scripts/task.py init-context "$PLAN_TASK_DIR" "$PLAN_DEV_TYPE" -``` - -This creates base jsonl files with standard specs for the dev type. - -### Step 2: Analyze Codebase with Research Agent - -Call research agent to find relevant specs and code patterns: - -``` -Task( - subagent_type: "research", - prompt: "Analyze what specs and code patterns are needed for this task. - -Task: ${PLAN_REQUIREMENT} -Dev Type: ${PLAN_DEV_TYPE} - -Instructions: -1. Search .trellis/spec/ for relevant spec files -2. Search the codebase for related modules and patterns -3. Identify files that should be added to jsonl context - -Output format (use exactly this format): - -## implement.jsonl -- path: , reason: -- path: , reason: - -## check.jsonl -- path: , reason: - -## debug.jsonl -- path: , reason: - -## Suggested Scope - - -## Technical Notes -", - model: "opus" -) -``` - -### Step 3: Add Context Entries - -Parse research agent output and add entries to jsonl files: - -```bash -# For each entry in implement.jsonl section: -python3 ./.trellis/scripts/task.py add-context "$PLAN_TASK_DIR" implement "" "" - -# For each entry in check.jsonl section: -python3 ./.trellis/scripts/task.py add-context "$PLAN_TASK_DIR" check "" "" - -# For each entry in debug.jsonl section: -python3 ./.trellis/scripts/task.py add-context "$PLAN_TASK_DIR" debug "" "" -``` - -### Step 4: Write prd.md - -Create the requirements document: - -```bash -cat > "$PLAN_TASK_DIR/prd.md" << 'EOF' -# Task: ${PLAN_TASK_NAME} - -## Overview -[Brief description of what this feature does] - -## Requirements -- [Requirement 1] -- [Requirement 2] -- ... - -## Acceptance Criteria -- [ ] [Criterion 1] -- [ ] [Criterion 2] -- ... - -## Technical Notes -[Any technical considerations from research agent] - -## Out of Scope -- [What this feature does NOT include] -EOF -``` - -**Guidelines for prd.md**: -- Be specific and actionable -- Include acceptance criteria that can be verified -- Add technical notes from research agent -- Define what's out of scope to prevent scope creep - -### Step 5: Configure Task Metadata - -```bash -# Set branch name -python3 ./.trellis/scripts/task.py set-branch "$PLAN_TASK_DIR" "feature/${PLAN_TASK_NAME}" - -# Set scope (from research agent suggestion) -python3 ./.trellis/scripts/task.py set-scope "$PLAN_TASK_DIR" "" - -# Update dev_type in task.json -jq --arg type "$PLAN_DEV_TYPE" '.dev_type = $type' \ - "$PLAN_TASK_DIR/task.json" > "$PLAN_TASK_DIR/task.json.tmp" \ - && mv "$PLAN_TASK_DIR/task.json.tmp" "$PLAN_TASK_DIR/task.json" -``` - -### Step 6: Validate Configuration - -```bash -python3 ./.trellis/scripts/task.py validate "$PLAN_TASK_DIR" -``` - -If validation fails, fix the invalid paths and re-validate. - -### Step 7: Output Summary - -Print a summary for the caller: - -```bash -echo "=== Plan Complete ===" -echo "Task Directory: $PLAN_TASK_DIR" -echo "" -echo "Files created:" -ls -la "$PLAN_TASK_DIR" -echo "" -echo "Context summary:" -python3 ./.trellis/scripts/task.py list-context "$PLAN_TASK_DIR" -echo "" -echo "Ready for: python3 ./.trellis/scripts/multi_agent/start.py $PLAN_TASK_DIR" -``` - ---- - -## Key Principles - -1. **Reject early, reject clearly** - Don't waste time on bad requirements -2. **Research before configure** - Always call research agent to understand the codebase -3. **Validate all paths** - Every file in jsonl must exist -4. **Be specific in prd.md** - Vague requirements lead to wrong implementations -5. **Include acceptance criteria** - Check agent needs to verify something concrete -6. **Set appropriate scope** - This affects commit message format - ---- - -## Error Handling - -### Research Agent Returns No Results - -If research agent finds no relevant specs: -- Use only the base specs from init-context -- Add a note in prd.md that this is a new area without existing patterns - -### Path Not Found - -If add-context fails because path doesn't exist: -- Skip that entry -- Log a warning -- Continue with other entries - -### Validation Fails - -If final validation fails: -- Read the error output -- Remove invalid entries from jsonl files -- Re-validate - ---- - -## Examples - -### Example: Accepted Requirement - -``` -Input: - PLAN_TASK_NAME = "add-rate-limiting" - PLAN_DEV_TYPE = "backend" - PLAN_REQUIREMENT = "Add rate limiting to API endpoints using a sliding window algorithm. Limit to 100 requests per minute per IP. Return 429 status when exceeded." - -Result: ACCEPTED - Clear, specific, has defined behavior - -Output: - .trellis/tasks/02-03-add-rate-limiting/ - ├── task.json # branch: feature/add-rate-limiting, scope: api - ├── prd.md # Detailed requirements with acceptance criteria - ├── implement.jsonl # Backend specs + existing middleware patterns - ├── check.jsonl # Quality guidelines + API testing specs - └── debug.jsonl # Error handling specs -``` - -### Example: Rejected - Vague Requirement - -``` -Input: - PLAN_REQUIREMENT = "Make the API faster" - -Result: REJECTED - -=== PLAN REJECTED === - -Reason: Unclear or Vague - -Details: -"Make the API faster" does not specify: -- Which endpoints need optimization -- Current performance baseline -- Target performance metrics -- Acceptable trade-offs (memory, complexity) - -Suggestions: -- Identify specific slow endpoints with response times -- Define target latency (e.g., "GET /users should respond in <100ms") -- Specify if caching, query optimization, or architecture changes are acceptable -``` - -### Example: Rejected - Too Large - -``` -Input: - PLAN_REQUIREMENT = "Add user authentication, authorization, password reset, 2FA, OAuth integration, and audit logging" - -Result: REJECTED - -=== PLAN REJECTED === - -Reason: Too Large / Should Be Split - -Details: -This requirement bundles 6 distinct features that should be implemented separately: -1. User authentication (login/logout) -2. Authorization (roles/permissions) -3. Password reset flow -4. Two-factor authentication -5. OAuth integration -6. Audit logging - -Suggestions: -- Start with basic authentication first -- Create separate features for each capability -- Consider dependencies (auth before authz, etc.) -``` diff --git a/.claude/agents/research.md b/.claude/agents/research.md deleted file mode 100644 index 659d59c6..00000000 --- a/.claude/agents/research.md +++ /dev/null @@ -1,120 +0,0 @@ ---- -name: research -description: | - Code and tech search expert. Pure research, no code modifications. Finds files, patterns, and tech solutions. -tools: Read, Glob, Grep, mcp__exa__web_search_exa, mcp__exa__get_code_context_exa, Skill, mcp__chrome-devtools__* -model: opus ---- -# Research Agent - -You are the Research Agent in the Trellis workflow. - -## Core Principle - -**You do one thing: find and explain information.** - -You are a documenter, not a reviewer. Your job is to help get the information needed. - ---- - -## Core Responsibilities - -### 1. Internal Search (Project Code) - -| Search Type | Goal | Tools | -|-------------|------|-------| -| **WHERE** | Locate files/components | Glob, Grep | -| **HOW** | Understand code logic | Read, Grep | -| **PATTERN** | Discover existing patterns | Grep, Read | - -### 2. External Search (Tech Solutions) - -Use web search for best practices and code examples. - ---- - -## Strict Boundaries - -### Only Allowed - -- Describe **what exists** -- Describe **where it is** -- Describe **how it works** -- Describe **how components interact** - -### Forbidden (unless explicitly asked) - -- Suggest improvements -- Criticize implementation -- Recommend refactoring -- Modify any files -- Execute git commands - ---- - -## Workflow - -### Step 1: Understand Search Request - -Analyze the query, determine: - -- Search type (internal/external/mixed) -- Search scope (global/specific directory) -- Expected output (file list/code patterns/tech solutions) - -### Step 2: Execute Search - -Execute multiple independent searches in parallel for efficiency. - -### Step 3: Organize Results - -Output structured results in report format. - ---- - -## Report Format - -```markdown -## Search Results - -### Query - -{original query} - -### Files Found - -| File Path | Description | -|-----------|-------------| -| `src/services/xxx.ts` | Main implementation | -| `src/types/xxx.ts` | Type definitions | - -### Code Pattern Analysis - -{Describe discovered patterns, cite specific files and line numbers} - -### Related Spec Documents - -- `.trellis/spec/xxx.md` - {description} - -### Not Found - -{If some content was not found, explain} -``` - ---- - -## Guidelines - -### DO - -- Provide specific file paths and line numbers -- Quote actual code snippets -- Distinguish "definitely found" and "possibly related" -- Explain search scope and limitations - -### DON'T - -- Don't guess uncertain info -- Don't omit important search results -- Don't add improvement suggestions in report (unless explicitly asked) -- Don't modify any files diff --git a/.claude/commands/trellis/before-dev.md b/.claude/commands/trellis/before-dev.md deleted file mode 100644 index d0807655..00000000 --- a/.claude/commands/trellis/before-dev.md +++ /dev/null @@ -1,29 +0,0 @@ -Read the relevant development guidelines before starting your task. - -Execute these steps: - -1. **Discover packages and their spec layers**: - ```bash - python3 ./.trellis/scripts/get_context.py --mode packages - ``` - -2. **Identify which specs apply** to your task based on: - - Which package you're modifying (e.g., `cli/`, `docs-site/`) - - What type of work (backend, frontend, unit-test, docs, etc.) - -3. **Read the spec index** for each relevant module: - ```bash - cat .trellis/spec///index.md - ``` - Follow the **"Pre-Development Checklist"** section in the index. - -4. **Read the specific guideline files** listed in the Pre-Development Checklist that are relevant to your task. The index is NOT the goal — it points you to the actual guideline files (e.g., `error-handling.md`, `conventions.md`, `mock-strategies.md`). Read those files to understand the coding standards and patterns. - -5. **Always read shared guides**: - ```bash - cat .trellis/spec/guides/index.md - ``` - -6. Understand the coding standards and patterns you need to follow, then proceed with your development plan. - -This step is **mandatory** before writing any code. diff --git a/.claude/commands/trellis/brainstorm.md b/.claude/commands/trellis/brainstorm.md deleted file mode 100644 index bc2b8afe..00000000 --- a/.claude/commands/trellis/brainstorm.md +++ /dev/null @@ -1,487 +0,0 @@ -# Brainstorm - Requirements Discovery (AI Coding Enhanced) - -Guide AI through collaborative requirements discovery **before implementation**, optimized for AI coding workflows: - -* **Task-first** (capture ideas immediately) -* **Action-before-asking** (reduce low-value questions) -* **Research-first** for technical choices (avoid asking users to invent options) -* **Diverge → Converge** (expand thinking, then lock MVP) - ---- - -## When to Use - -Triggered from `/trellis:start` when the user describes a development task, especially when: - -* requirements are unclear or evolving -* there are multiple valid implementation paths -* trade-offs matter (UX, reliability, maintainability, cost, performance) -* the user might not know the best options up front - ---- - -## Core Principles (Non-negotiable) - -1. **Task-first (capture early)** - Always ensure a task exists at the start so the user's ideas are recorded immediately. - -2. **Action before asking** - If you can derive the answer from repo code, docs, configs, conventions, or quick research — do that first. - -3. **One question per message** - Never overwhelm the user with a list of questions. Ask one, update PRD, repeat. - -4. **Prefer concrete options** - For preference/decision questions, present 2–3 feasible, specific approaches with trade-offs. - -5. **Research-first for technical choices** - If the decision depends on industry conventions / similar tools / established patterns, do research first, then propose options. - -6. **Diverge → Converge** - After initial understanding, proactively consider future evolution, related scenarios, and failure/edge cases — then converge to an MVP with explicit out-of-scope. - -7. **No meta questions** - Do not ask "should I search?" or "can you paste the code so I can continue?" - If you need information: search/inspect. If blocked: ask the minimal blocking question. - ---- - -## Step 0: Ensure Task Exists (ALWAYS) - -Before any Q&A, ensure a task exists. If none exists, create one immediately. - -* Use a **temporary working title** derived from the user's message. -* It's OK if the title is imperfect — refine later in PRD. - -```bash -TASK_DIR=$(python3 ./.trellis/scripts/task.py create "brainstorm: " --slug ) -``` - -Create/seed `prd.md` immediately with what you know: - -```markdown -# brainstorm: - -## Goal - - - -## What I already know - -* -* - -## Assumptions (temporary) - -* - -## Open Questions - -* - -## Requirements (evolving) - -* - -## Acceptance Criteria (evolving) - -* [ ] - -## Definition of Done (team quality bar) - -* Tests added/updated (unit/integration where appropriate) -* Lint / typecheck / CI green -* Docs/notes updated if behavior changes -* Rollout/rollback considered if risky - -## Out of Scope (explicit) - -* - -## Technical Notes - -* -* -``` - ---- - -## Step 1: Auto-Context (DO THIS BEFORE ASKING QUESTIONS) - -Before asking questions like "what does the code look like?", gather context yourself: - -### Repo inspection checklist - -* Identify likely modules/files impacted -* Locate existing patterns (similar features, conventions, error handling style) -* Check configs, scripts, existing command definitions -* Note any constraints (runtime, dependency policy, build tooling) - -### Documentation checklist - -* Look for existing PRDs/specs/templates -* Look for command usage examples, README, ADRs if any - -Write findings into PRD: - -* Add to `What I already know` -* Add constraints/links to `Technical Notes` - ---- - -## Step 2: Classify Complexity (still useful, not gating task creation) - -| Complexity | Criteria | Action | -| ------------ | ------------------------------------------------------ | ------------------------------------------- | -| **Trivial** | Single-line fix, typo, obvious change | Skip brainstorm, implement directly | -| **Simple** | Clear goal, 1–2 files, scope well-defined | Ask 1 confirm question, then implement | -| **Moderate** | Multiple files, some ambiguity | Light brainstorm (2–3 high-value questions) | -| **Complex** | Vague goal, architectural choices, multiple approaches | Full brainstorm | - -> Note: Task already exists from Step 0. Classification only affects depth of brainstorming. - ---- - -## Step 3: Question Gate (Ask ONLY high-value questions) - -Before asking ANY question, run the following gate: - -### Gate A — Can I derive this without the user? - -If answer is available via: - -* repo inspection (code/config) -* docs/specs/conventions -* quick market/OSS research - -→ **Do not ask.** Fetch it, summarize, update PRD. - -### Gate B — Is this a meta/lazy question? - -Examples: - -* "Should I search?" -* "Can you paste the code so I can proceed?" -* "What does the code look like?" (when repo is available) - -→ **Do not ask.** Take action. - -### Gate C — What type of question is it? - -* **Blocking**: cannot proceed without user input -* **Preference**: multiple valid choices, depends on product/UX/risk preference -* **Derivable**: should be answered by inspection/research - -→ Only ask **Blocking** or **Preference**. - ---- - -## Step 4: Research-first Mode (Mandatory for technical choices) - -### Trigger conditions (any → research-first) - -* The task involves selecting an approach, library, protocol, framework, template system, plugin mechanism, or CLI UX convention -* The user asks for "best practice", "how others do it", "recommendation" -* The user can't reasonably enumerate options - -### Research steps - -1. Identify 2–4 comparable tools/patterns -2. Summarize common conventions and why they exist -3. Map conventions onto our repo constraints -4. Produce **2–3 feasible approaches** for our project - -### Research output format (PRD) - -Add a section in PRD (either within Technical Notes or as its own): - -```markdown -## Research Notes - -### What similar tools do - -* ... -* ... - -### Constraints from our repo/project - -* ... - -### Feasible approaches here - -**Approach A: ** (Recommended) - -* How it works: -* Pros: -* Cons: - -**Approach B: ** - -* How it works: -* Pros: -* Cons: - -**Approach C: ** (optional) - -* ... -``` - -Then ask **one** preference question: - -* "Which approach do you prefer: A / B / C (or other)?" - ---- - -## Step 5: Expansion Sweep (DIVERGE) — Required after initial understanding - -After you can summarize the goal, proactively broaden thinking before converging. - -### Expansion categories (keep to 1–2 bullets each) - -1. **Future evolution** - - * What might this feature become in 1–3 months? - * What extension points are worth preserving now? - -2. **Related scenarios** - - * What adjacent commands/flows should remain consistent with this? - * Are there parity expectations (create vs update, import vs export, etc.)? - -3. **Failure & edge cases** - - * Conflicts, offline/network failure, retries, idempotency, compatibility, rollback - * Input validation, security boundaries, permission checks - -### Expansion message template (to user) - -```markdown -I understand you want to implement: . - -Before diving into design, let me quickly diverge to consider three categories (to avoid rework later): - -1. Future evolution: <1–2 bullets> -2. Related scenarios: <1–2 bullets> -3. Failure/edge cases: <1–2 bullets> - -For this MVP, which would you like to include (or none)? - -1. Current requirement only (minimal viable) -2. Add (reserve for future extension) -3. Add (improve robustness/consistency) -4. Other: describe your preference -``` - -Then update PRD: - -* What's in MVP → `Requirements` -* What's excluded → `Out of Scope` - ---- - -## Step 6: Q&A Loop (CONVERGE) - -### Rules - -* One question per message -* Prefer multiple-choice when possible -* After each user answer: - - * Update PRD immediately - * Move answered items from `Open Questions` → `Requirements` - * Update `Acceptance Criteria` with testable checkboxes - * Clarify `Out of Scope` - -### Question priority (recommended) - -1. **MVP scope boundary** (what is included/excluded) -2. **Preference decisions** (after presenting concrete options) -3. **Failure/edge behavior** (only for MVP-critical paths) -4. **Success metrics & Acceptance Criteria** (what proves it works) - -### Preferred question format (multiple choice) - -```markdown -For , which approach do you prefer? - -1. **Option A** — -2. **Option B** — -3. **Option C** — -4. **Other** — describe your preference -``` - ---- - -## Step 7: Propose Approaches + Record Decisions (Complex tasks) - -After requirements are clear enough, propose 2–3 approaches (if not already done via research-first): - -```markdown -Based on current information, here are 2–3 feasible approaches: - -**Approach A: ** (Recommended) - -* How: -* Pros: -* Cons: - -**Approach B: ** - -* How: -* Pros: -* Cons: - -Which direction do you prefer? -``` - -Record the outcome in PRD as an ADR-lite section: - -```markdown -## Decision (ADR-lite) - -**Context**: Why this decision was needed -**Decision**: Which approach was chosen -**Consequences**: Trade-offs, risks, potential future improvements -``` - ---- - -## Step 8: Final Confirmation + Implementation Plan - -When open questions are resolved, confirm complete requirements with a structured summary: - -### Final confirmation format - -```markdown -Here's my understanding of the complete requirements: - -**Goal**: - -**Requirements**: - -* ... -* ... - -**Acceptance Criteria**: - -* [ ] ... -* [ ] ... - -**Definition of Done**: - -* ... - -**Out of Scope**: - -* ... - -**Technical Approach**: - - -**Implementation Plan (small PRs)**: - -* PR1: -* PR2: -* PR3: - -Does this look correct? If yes, I'll proceed with implementation. -``` - -### Subtask Decomposition (Complex Tasks) - -For complex tasks with multiple independent work items, create subtasks: - -```bash -# Create child tasks -CHILD1=$(python3 ./.trellis/scripts/task.py create "Child task 1" --slug child1 --parent "$TASK_DIR") -CHILD2=$(python3 ./.trellis/scripts/task.py create "Child task 2" --slug child2 --parent "$TASK_DIR") - -# Or link existing tasks -python3 ./.trellis/scripts/task.py add-subtask "$TASK_DIR" "$CHILD_DIR" -``` - ---- - -## PRD Target Structure (final) - -`prd.md` should converge to: - -```markdown -# - -## Goal - - - -## Requirements - -* ... - -## Acceptance Criteria - -* [ ] ... - -## Definition of Done - -* ... - -## Technical Approach - - - -## Decision (ADR-lite) - -Context / Decision / Consequences - -## Out of Scope - -* ... - -## Technical Notes - - -``` - ---- - -## Anti-Patterns (Hard Avoid) - -* Asking user for code/context that can be derived from repo -* Asking user to choose an approach before presenting concrete options -* Meta questions about whether to research -* Staying narrowly on the initial request without considering evolution/edges -* Letting brainstorming drift without updating PRD - ---- - -## Integration with Start Workflow - -After brainstorm completes (Step 8 confirmation approved), the flow continues to the Task Workflow's **Phase 2: Prepare for Implementation**: - -```text -Brainstorm - Step 0: Create task directory + seed PRD - Step 1–7: Discover requirements, research, converge - Step 8: Final confirmation → user approves - ↓ -Task Workflow Phase 2 (Prepare for Implementation) - Code-Spec Depth Check (if applicable) - → Research codebase (based on confirmed PRD) - → Configure code-spec context (jsonl files) - → Activate task - ↓ -Task Workflow Phase 3 (Execute) - Implement → Check → Complete -``` - -The task directory and PRD already exist from brainstorm, so Phase 1 of the Task Workflow is skipped entirely. - ---- - -## Related Commands - -| Command | When to Use | -|---------|-------------| -| `/trellis:start` | Entry point that triggers brainstorm | -| `/trellis:finish-work` | After implementation is complete | -| `/trellis:update-spec` | If new patterns emerge during work | diff --git a/.claude/commands/trellis/break-loop.md b/.claude/commands/trellis/break-loop.md deleted file mode 100644 index 99057513..00000000 --- a/.claude/commands/trellis/break-loop.md +++ /dev/null @@ -1,125 +0,0 @@ -# Break the Loop - Deep Bug Analysis - -When debug is complete, use this command for deep analysis to break the "fix bug -> forget -> repeat" cycle. - ---- - -## Analysis Framework - -Analyze the bug you just fixed from these 5 dimensions: - -### 1. Root Cause Category - -Which category does this bug belong to? - -| Category | Characteristics | Example | -|----------|-----------------|---------| -| **A. Missing Spec** | No documentation on how to do it | New feature without checklist | -| **B. Cross-Layer Contract** | Interface between layers unclear | API returns different format than expected | -| **C. Change Propagation Failure** | Changed one place, missed others | Changed function signature, missed call sites | -| **D. Test Coverage Gap** | Unit test passes, integration fails | Works alone, breaks when combined | -| **E. Implicit Assumption** | Code relies on undocumented assumption | Timestamp seconds vs milliseconds | - -### 2. Why Fixes Failed (if applicable) - -If you tried multiple fixes before succeeding, analyze each failure: - -- **Surface Fix**: Fixed symptom, not root cause -- **Incomplete Scope**: Found root cause, didn't cover all cases -- **Tool Limitation**: grep missed it, type check wasn't strict -- **Mental Model**: Kept looking in same layer, didn't think cross-layer - -### 3. Prevention Mechanisms - -What mechanisms would prevent this from happening again? - -| Type | Description | Example | -|------|-------------|---------| -| **Documentation** | Write it down so people know | Update thinking guide | -| **Architecture** | Make the error impossible structurally | Type-safe wrappers | -| **Compile-time** | TypeScript strict, no any | Signature change causes compile error | -| **Runtime** | Monitoring, alerts, scans | Detect orphan entities | -| **Test Coverage** | E2E tests, integration tests | Verify full flow | -| **Code Review** | Checklist, PR template | "Did you check X?" | - -### 4. Systematic Expansion - -What broader problems does this bug reveal? - -- **Similar Issues**: Where else might this problem exist? -- **Design Flaw**: Is there a fundamental architecture issue? -- **Process Flaw**: Is there a development process improvement? -- **Knowledge Gap**: Is the team missing some understanding? - -### 5. Knowledge Capture - -Solidify insights into the system: - -- [ ] Update `.trellis/spec/guides/` thinking guides -- [ ] Update `.trellis/spec/backend/` or `frontend/` docs -- [ ] Create issue record (if applicable) -- [ ] Create feature ticket for root fix -- [ ] Update check commands if needed - ---- - -## Output Format - -Please output analysis in this format: - -```markdown -## Bug Analysis: [Short Description] - -### 1. Root Cause Category -- **Category**: [A/B/C/D/E] - [Category Name] -- **Specific Cause**: [Detailed description] - -### 2. Why Fixes Failed (if applicable) -1. [First attempt]: [Why it failed] -2. [Second attempt]: [Why it failed] -... - -### 3. Prevention Mechanisms -| Priority | Mechanism | Specific Action | Status | -|----------|-----------|-----------------|--------| -| P0 | ... | ... | TODO/DONE | - -### 4. Systematic Expansion -- **Similar Issues**: [List places with similar problems] -- **Design Improvement**: [Architecture-level suggestions] -- **Process Improvement**: [Development process suggestions] - -### 5. Knowledge Capture -- [ ] [Documents to update / tickets to create] -``` - ---- - -## Core Philosophy - -> **The value of debugging is not in fixing the bug, but in making this class of bugs never happen again.** - -Three levels of insight: -1. **Tactical**: How to fix THIS bug -2. **Strategic**: How to prevent THIS CLASS of bugs -3. **Philosophical**: How to expand thinking patterns - -30 minutes of analysis saves 30 hours of future debugging. - ---- - -## After Analysis: Immediate Actions - -**IMPORTANT**: After completing the analysis above, you MUST immediately: - -1. **Update spec/guides** - Don't just list TODOs, actually update the relevant files: - - If it's a cross-platform issue → update `cross-platform-thinking-guide.md` - - If it's a cross-layer issue → update `cross-layer-thinking-guide.md` - - If it's a code reuse issue → update `code-reuse-thinking-guide.md` - - If it's domain-specific → update `backend/*.md` or `frontend/*.md` - -2. **Sync templates** - After updating `.trellis/spec/`, sync to `src/templates/markdown/spec/` - -3. **Commit the spec updates** - This is the primary output, not just the analysis text - -> **The analysis is worthless if it stays in chat. The value is in the updated specs.** diff --git a/.claude/commands/trellis/check-cross-layer.md b/.claude/commands/trellis/check-cross-layer.md deleted file mode 100644 index 591d39b5..00000000 --- a/.claude/commands/trellis/check-cross-layer.md +++ /dev/null @@ -1,153 +0,0 @@ -# Cross-Layer Check - -Check if your changes considered all dimensions. Most bugs come from "didn't think of it", not lack of technical skill. - -> **Note**: This is a **post-implementation** safety net. Ideally, read the [Pre-Implementation Checklist](.trellis/spec/guides/pre-implementation-checklist.md) **before** writing code. - ---- - -## Related Documents - -| Document | Purpose | Timing | -|----------|---------|--------| -| [Pre-Implementation Checklist](.trellis/spec/guides/pre-implementation-checklist.md) | Questions before coding | **Before** writing code | -| [Code Reuse Thinking Guide](.trellis/spec/guides/code-reuse-thinking-guide.md) | Pattern recognition | During implementation | -| **`/trellis:check-cross-layer`** (this) | Verification check | **After** implementation | - ---- - -## Execution Steps - -### 1. Identify Change Scope - -```bash -git status -git diff --name-only -``` - -### 2. Select Applicable Check Dimensions - -Based on your change type, execute relevant checks below: - ---- - -## Dimension A: Cross-Layer Data Flow (Required when 3+ layers) - -**Trigger**: Changes involve 3 or more layers - -| Layer | Common Locations | -|-------|------------------| -| API/Routes | `routes/`, `api/`, `handlers/`, `controllers/` | -| Service/Business Logic | `services/`, `lib/`, `core/`, `domain/` | -| Database/Storage | `db/`, `models/`, `repositories/`, `schema/` | -| UI/Presentation | `components/`, `views/`, `templates/`, `pages/` | -| Utility | `utils/`, `helpers/`, `common/` | - -**Checklist**: -- [ ] Read flow: Database -> Service -> API -> UI -- [ ] Write flow: UI -> API -> Service -> Database -- [ ] Types/schemas correctly passed between layers? -- [ ] Errors properly propagated to caller? -- [ ] Loading/pending states handled at each layer? - -**Detailed Guide**: `.trellis/spec/guides/cross-layer-thinking-guide.md` - ---- - -## Dimension B: Code Reuse (Required when modifying constants/config) - -**Trigger**: -- Modifying UI constants (label, icon, color) -- Modifying any hardcoded value -- Seeing similar code in multiple places -- Creating a new utility/helper function -- Just finished batch modifications across files - -**Checklist**: -- [ ] Search first: How many places define this value? - ```bash - # Search in source files (adjust extensions for your project) - grep -r "value-to-change" src/ - ``` -- [ ] If 2+ places define same value -> Should extract to shared constant -- [ ] After modification, all usage sites updated? -- [ ] If creating utility: Does similar utility already exist? - -**Detailed Guide**: `.trellis/spec/guides/code-reuse-thinking-guide.md` - ---- - -## Dimension B2: New Utility Functions - -**Trigger**: About to create a new utility/helper function - -**Checklist**: -- [ ] Search for existing similar utilities first - ```bash - grep -r "functionNamePattern" src/ - ``` -- [ ] If similar exists, can you extend it instead? -- [ ] If creating new, is it in the right location (shared vs domain-specific)? - ---- - -## Dimension B3: After Batch Modifications - -**Trigger**: Just modified similar patterns in multiple files - -**Checklist**: -- [ ] Did you check ALL files with similar patterns? - ```bash - grep -r "patternYouChanged" src/ - ``` -- [ ] Any files missed that should also be updated? -- [ ] Should this pattern be abstracted to prevent future duplication? - ---- - -## Dimension C: Import/Dependency Paths (Required when creating new files) - -**Trigger**: Creating new source files - -**Checklist**: -- [ ] Using correct import paths (relative vs absolute)? -- [ ] No circular dependencies? -- [ ] Consistent with project's module organization? - ---- - -## Dimension D: Same-Layer Consistency - -**Trigger**: -- Modifying display logic or formatting -- Same domain concept used in multiple places - -**Checklist**: -- [ ] Search for other places using same concept - ```bash - grep -r "ConceptName" src/ - ``` -- [ ] Are these usages consistent? -- [ ] Should they share configuration/constants? - ---- - -## Common Issues Quick Reference - -| Issue | Root Cause | Prevention | -|-------|------------|------------| -| Changed one place, missed others | Didn't search impact scope | `grep` before changing | -| Data lost at some layer | Didn't check data flow | Trace data source to destination | -| Type/schema mismatch | Cross-layer types inconsistent | Use shared type definitions | -| UI/output inconsistent | Same concept in multiple places | Extract shared constants | -| Similar utility exists | Didn't search first | Search before creating | -| Batch fix incomplete | Didn't verify all occurrences | grep after fixing | - ---- - -## Output - -Report: -1. Which dimensions your changes involve -2. Check results for each dimension -3. Issues found and fix suggestions diff --git a/.claude/commands/trellis/check.md b/.claude/commands/trellis/check.md deleted file mode 100644 index 8e3e272e..00000000 --- a/.claude/commands/trellis/check.md +++ /dev/null @@ -1,25 +0,0 @@ -Check if the code you just wrote follows the development guidelines. - -Execute these steps: - -1. **Identify changed files**: - ```bash - git diff --name-only HEAD - ``` - -2. **Determine which spec modules apply** based on the changed file paths: - ```bash - python3 ./.trellis/scripts/get_context.py --mode packages - ``` - -3. **Read the spec index** for each relevant module: - ```bash - cat .trellis/spec///index.md - ``` - Follow the **"Quality Check"** section in the index. - -4. **Read the specific guideline files** referenced in the Quality Check section (e.g., `quality-guidelines.md`, `conventions.md`). The index is NOT the goal — it points you to the actual guideline files. Read those files and review your code against them. - -5. **Run lint and typecheck** for the affected package. - -6. **Report any violations** and fix them if found. diff --git a/.claude/commands/trellis/create-command.md b/.claude/commands/trellis/create-command.md deleted file mode 100644 index 42397f43..00000000 --- a/.claude/commands/trellis/create-command.md +++ /dev/null @@ -1,154 +0,0 @@ -# Create New Slash Command - -Create a new slash command in both `.cursor/commands/` (with `trellis-` prefix) and `.claude/commands/trellis/` directories based on user requirements. - -## Usage - -``` -/trellis:create-command -``` - -**Example**: -``` -/trellis:create-command review-pr Check PR code changes against project guidelines -``` - -## Execution Steps - -### 1. Parse Input - -Extract from user input: -- **Command name**: Use kebab-case (e.g., `review-pr`) -- **Description**: What the command should accomplish - -### 2. Analyze Requirements - -Determine command type based on description: -- **Initialization**: Read docs, establish context -- **Pre-development**: Read guidelines, check dependencies -- **Code check**: Validate code quality and guideline compliance -- **Recording**: Record progress, questions, structure changes -- **Generation**: Generate docs, code templates - -### 3. Generate Command Content - -Based on command type, generate appropriate content: - -**Simple command** (1-3 lines): -```markdown -Concise instruction describing what to do -``` - -**Complex command** (with steps): -```markdown -# Command Title - -Command description - -## Steps - -### 1. First Step -Specific action - -### 2. Second Step -Specific action - -## Output Format (if needed) - -Template -``` - -### 4. Create Files - -Create in both directories: -- `.cursor/commands/trellis-.md` -- `.claude/commands/trellis/.md` - -### 5. Confirm Creation - -Output result: -``` -[OK] Created Slash Command: / - -File paths: -- .cursor/commands/trellis-.md -- .claude/commands/trellis/.md - -Usage: -/trellis: - -Description: - -``` - -## Command Content Guidelines - -### [OK] Good command content - -1. **Clear and concise**: Immediately understandable -2. **Executable**: AI can follow steps directly -3. **Well-scoped**: Clear boundaries of what to do and not do -4. **Has output**: Specifies expected output format (if needed) - -### [X] Avoid - -1. **Too vague**: e.g., "optimize code" -2. **Too complex**: Single command should not exceed 100 lines -3. **Duplicate functionality**: Check if similar command exists first - -## Naming Conventions - -| Command Type | Prefix | Example | -|--------------|--------|---------| -| Session Start | `start` | `start` | -| Pre-development | `before-` | `before-dev` | -| Check | `check-` | `check` | -| Record | `record-` | `record-session` | -| Generate | `generate-` | `generate-api-doc` | -| Update | `update-` | `update-changelog` | -| Other | Verb-first | `review-code`, `sync-data` | - -## Example - -### Input -``` -/trellis:create-command review-pr Check PR code changes against project guidelines -``` - -### Generated Command Content -```markdown -# PR Code Review - -Check current PR code changes against project guidelines. - -## Steps - -### 1. Get Changed Files -```bash -git diff main...HEAD --name-only -``` - -### 2. Categorized Review - -**Frontend files** (`apps/web/`): -- Reference `.trellis/spec/frontend/index.md` - -**Backend files** (`packages/api/`): -- Reference `.trellis/spec/backend/index.md` - -### 3. Output Review Report - -Format: - -## PR Review Report - -### Changed Files -- [file list] - -### Check Results -- [OK] Passed items -- [X] Issues found - -### Suggestions -- [improvement suggestions] -``` diff --git a/.claude/commands/trellis/finish-work.md b/.claude/commands/trellis/finish-work.md deleted file mode 100644 index 9daea672..00000000 --- a/.claude/commands/trellis/finish-work.md +++ /dev/null @@ -1,153 +0,0 @@ -# Finish Work - Pre-Commit Checklist - -Before submitting or committing, use this checklist to ensure work completeness. - -**Timing**: After code is written and tested, before commit - ---- - -## Checklist - -### 1. Code Quality - -```bash -# Must pass -pnpm lint -pnpm type-check -pnpm test -``` - -- [ ] `pnpm lint` passes with 0 errors? -- [ ] `pnpm type-check` passes with no type errors? -- [ ] Tests pass? -- [ ] No `console.log` statements (use logger)? -- [ ] No non-null assertions (the `x!` operator)? -- [ ] No `any` types? - -### 1.5. Test Coverage - -Check if your change needs new or updated tests (see `.trellis/spec/unit-test/conventions.md`): - -- [ ] New pure function → unit test added? -- [ ] Bug fix → regression test added in `test/regression.test.ts`? -- [ ] Changed init/update behavior → integration test added/updated? -- [ ] No logic change (text/data only) → no test needed - -### 2. Code-Spec Sync - -**Code-Spec Docs**: -- [ ] Does `.trellis/spec/backend/` need updates? - - New patterns, new modules, new conventions -- [ ] Does `.trellis/spec/frontend/` need updates? - - New components, new hooks, new patterns -- [ ] Does `.trellis/spec/guides/` need updates? - - New cross-layer flows, lessons from bugs - -**Key Question**: -> "If I fixed a bug or discovered something non-obvious, should I document it so future me (or others) won't hit the same issue?" - -If YES -> Update the relevant code-spec doc. - -### 2.5. Code-Spec Hard Block (Infra/Cross-Layer) - -If this change touches infra or cross-layer contracts, this is a blocking checklist: - -- [ ] Spec content is executable (real signatures/contracts), not principle-only text -- [ ] Includes file path + command/API name + payload field names -- [ ] Includes validation and error matrix -- [ ] Includes Good/Base/Bad cases -- [ ] Includes required tests and assertion points - -**Block Rule**: -In pipeline mode, the finish agent will automatically detect and execute spec updates when gaps are found. -If running this checklist manually, ensure spec sync is complete before committing — run `/trellis:update-spec` if needed. - -### 3. API Changes - -If you modified API endpoints: - -- [ ] Input schema updated? -- [ ] Output schema updated? -- [ ] API documentation updated? -- [ ] Client code updated to match? - -### 4. Database Changes - -If you modified database schema: - -- [ ] Migration file created? -- [ ] Schema file updated? -- [ ] Related queries updated? -- [ ] Seed data updated (if applicable)? - -### 5. Cross-Layer Verification - -If the change spans multiple layers: - -- [ ] Data flows correctly through all layers? -- [ ] Error handling works at each boundary? -- [ ] Types are consistent across layers? -- [ ] Loading states handled? - -### 6. Manual Testing - -- [ ] Feature works in browser/app? -- [ ] Edge cases tested? -- [ ] Error states tested? -- [ ] Works after page refresh? - ---- - -## Quick Check Flow - -```bash -# 1. Code checks -pnpm lint && pnpm type-check - -# 2. View changes -git status -git diff --name-only - -# 3. Based on changed files, check relevant items above -``` - ---- - -## Common Oversights - -| Oversight | Consequence | Check | -|-----------|-------------|-------| -| Code-spec docs not updated | Others don't know the change | Check .trellis/spec/ | -| Spec text is abstract only | Easy regressions in infra/cross-layer changes | Require signature/contract/matrix/cases/tests | -| Migration not created | Schema out of sync | Check db/migrations/ | -| Types not synced | Runtime errors | Check shared types | -| Tests not updated | False confidence | Run full test suite | -| Console.log left in | Noisy production logs | Search for console.log | - ---- - -## Relationship to Other Commands - -``` -Development Flow: - Write code -> Test -> /trellis:finish-work -> git commit -> /trellis:record-session - | | - Ensure completeness Record progress - -Debug Flow: - Hit bug -> Fix -> /trellis:break-loop -> Knowledge capture - | - Deep analysis -``` - -- `/trellis:finish-work` - Check work completeness (this command) -- `/trellis:record-session` - Record session and commits -- `/trellis:break-loop` - Deep analysis after debugging - ---- - -## Core Principle - -> **Delivery includes not just code, but also documentation, verification, and knowledge capture.** - -Complete work = Code + Docs + Tests + Verification diff --git a/.claude/commands/trellis/integrate-skill.md b/.claude/commands/trellis/integrate-skill.md deleted file mode 100644 index cacafd5a..00000000 --- a/.claude/commands/trellis/integrate-skill.md +++ /dev/null @@ -1,219 +0,0 @@ -# Integrate Claude Skill into Project Guidelines - -Adapt and integrate a Claude global skill into your project's development guidelines (not directly into project code). - -## Usage - -``` -/trellis:integrate-skill -``` - -**Examples**: -``` -/trellis:integrate-skill frontend-design -/trellis:integrate-skill mcp-builder -``` - -## Core Principle - -> [!] **Important**: The goal of skill integration is to update **development guidelines**, not to generate project code directly. -> -> - Guidelines content -> Write to `.trellis/spec/{target}/doc.md` -> - Code examples -> Place in `.trellis/spec/{target}/examples/skills//` -> - Example files -> Use `.template` suffix (e.g., `component.tsx.template`) to avoid IDE errors -> -> Where `{target}` is `frontend` or `backend`, determined by skill type. - -## Execution Steps - -### 1. Read Skill Content - -```bash -openskills read -``` - -If the skill doesn't exist, prompt user to check available skills: -```bash -# Available skills are listed in AGENTS.md under -``` - -### 2. Determine Integration Target - -Based on skill type, determine which guidelines to update: - -| Skill Category | Integration Target | -|----------------|-------------------| -| UI/Frontend (`frontend-design`, `web-artifacts-builder`) | `.trellis/spec/frontend/` | -| Backend/API (`mcp-builder`) | `.trellis/spec/backend/` | -| Documentation (`doc-coauthoring`, `docx`, `pdf`) | `.trellis/` or create dedicated guidelines | -| Testing (`webapp-testing`) | `.trellis/spec/frontend/` (E2E) | - -### 3. Analyze Skill Content - -Extract from the skill: -- **Core concepts**: How the skill works and key concepts -- **Best practices**: Recommended approaches -- **Code patterns**: Reusable code templates -- **Caveats**: Common issues and solutions - -### 4. Execute Integration - -#### 4.1 Update Guidelines Document - -Add a new section to the corresponding `doc.md`: - -```markdown -@@@section:skill- -## # Integration Guide - -### Overview -[Core functionality and use cases of the skill] - -### Project Adaptation -[How to use this skill in the current project] - -### Usage Steps -1. [Step 1] -2. [Step 2] - -### Caveats -- [Project-specific constraints] -- [Differences from default behavior] - -### Reference Examples -See `examples/skills//` - -@@@/section:skill- -``` - -#### 4.2 Create Examples Directory (if code examples exist) - -```bash -# Directory structure ({target} = frontend or backend) -.trellis/spec/{target}/ -|-- doc.md # Add skill-related section -|-- index.md # Update index -+-- examples/ - +-- skills/ - +-- / - |-- README.md # Example documentation - |-- example-1.ts.template # Code example (use .template suffix) - +-- example-2.tsx.template -``` - -**File naming conventions**: -- Code files: `..template` (e.g., `component.tsx.template`) -- Config files: `.config.template` (e.g., `tailwind.config.template`) -- Documentation: `README.md` (normal suffix) - -#### 4.3 Update Index File - -Add to the Quick Navigation table in `index.md`: - -```markdown -| |
| `skill-` | -``` - -### 5. Generate Integration Report - ---- - -## Skill Integration Report: `` - -### # Overview -- **Skill description**: [Functionality description] -- **Integration target**: `.trellis/spec/{target}/` - -### # Tech Stack Compatibility - -| Skill Requirement | Project Status | Compatibility | -|-------------------|----------------|---------------| -| [Tech 1] | [Project tech] | [OK]/[!]/[X] | - -### # Integration Locations - -| Type | Path | -|------|------| -| Guidelines doc | `.trellis/spec/{target}/doc.md` (section: `skill-`) | -| Code examples | `.trellis/spec/{target}/examples/skills//` | -| Index update | `.trellis/spec/{target}/index.md` | - -> `{target}` = `frontend` or `backend` - -### # Dependencies (if needed) - -```bash -# Install required dependencies (adjust for your package manager) -npm install -# or -pnpm add -# or -yarn add -``` - -### [OK] Completed Changes - -- [ ] Added `@@@section:skill-` section to `doc.md` -- [ ] Added index entry to `index.md` -- [ ] Created example files in `examples/skills//` -- [ ] Example files use `.template` suffix - -### # Related Guidelines - -- [Existing related section IDs] - ---- - -## 6. Optional: Create Usage Command - -If this skill is frequently used, create a shortcut command: - -```bash -/trellis:create-command use- Use skill following project guidelines -``` - -## Common Skill Integration Reference - -| Skill | Integration Target | Examples Directory | -|-------|-------------------|-------------------| -| `frontend-design` | `frontend` | `examples/skills/frontend-design/` | -| `mcp-builder` | `backend` | `examples/skills/mcp-builder/` | -| `webapp-testing` | `frontend` | `examples/skills/webapp-testing/` | -| `doc-coauthoring` | `.trellis/` | N/A (documentation workflow only) | - -## Example: Integrating `mcp-builder` Skill - -### Directory Structure - -``` -.trellis/spec/backend/ -|-- doc.md # Add MCP section -|-- index.md # Add index entry -+-- examples/ - +-- skills/ - +-- mcp-builder/ - |-- README.md - |-- server.ts.template - |-- tools.ts.template - +-- types.ts.template -``` - -### New Section in doc.md - -```markdown -@@@section:skill-mcp-builder -## # MCP Server Development Guide - -### Overview -Create LLM-callable tool services using MCP (Model Context Protocol). - -### Project Adaptation -- Place services in a dedicated directory -- Follow existing TypeScript and type definition conventions -- Use project's logging system - -### Reference Examples -See `examples/skills/mcp-builder/` - -@@@/section:skill-mcp-builder -``` diff --git a/.claude/commands/trellis/onboard.md b/.claude/commands/trellis/onboard.md deleted file mode 100644 index 2d4dabf8..00000000 --- a/.claude/commands/trellis/onboard.md +++ /dev/null @@ -1,358 +0,0 @@ -You are a senior developer onboarding a new team member to this project's AI-assisted workflow system. - -YOUR ROLE: Be a mentor and teacher. Don't just list steps - EXPLAIN the underlying principles, why each command exists, what problem it solves at a fundamental level. - -## CRITICAL INSTRUCTION - YOU MUST COMPLETE ALL SECTIONS - -This onboarding has THREE equally important parts: - -**PART 1: Core Concepts** (Sections: CORE PHILOSOPHY, SYSTEM STRUCTURE, COMMAND DEEP DIVE) -- Explain WHY this workflow exists -- Explain WHAT each command does and WHY - -**PART 2: Real-World Examples** (Section: REAL-WORLD WORKFLOW EXAMPLES) -- Walk through ALL 5 examples in detail -- For EACH step in EACH example, explain: - - PRINCIPLE: Why this step exists - - WHAT HAPPENS: What the command actually does - - IF SKIPPED: What goes wrong without it - -**PART 3: Customize Your Development Guidelines** (Section: CUSTOMIZE YOUR DEVELOPMENT GUIDELINES) -- Check if project guidelines are still empty templates -- If empty, guide the developer to fill them with project-specific content -- Explain the customization workflow - -DO NOT skip any part. All three parts are essential: -- Part 1 teaches the concepts -- Part 2 shows how concepts work in practice -- Part 3 ensures the project has proper guidelines for AI to follow - -After completing ALL THREE parts, ask the developer about their first task. - ---- - -## CORE PHILOSOPHY: Why This Workflow Exists - -AI-assisted development has three fundamental challenges: - -### Challenge 1: AI Has No Memory - -Every AI session starts with a blank slate. Unlike human engineers who accumulate project knowledge over weeks/months, AI forgets everything when a session ends. - -**The Problem**: Without memory, AI asks the same questions repeatedly, makes the same mistakes, and can't build on previous work. - -**The Solution**: The `.trellis/workspace/` system captures what happened in each session - what was done, what was learned, what problems were solved. The `/trellis:start` command reads this history at session start, giving AI "artificial memory." - -### Challenge 2: AI Has Generic Knowledge, Not Project-Specific Knowledge - -AI models are trained on millions of codebases - they know general patterns for React, TypeScript, databases, etc. But they don't know YOUR project's conventions. - -**The Problem**: AI writes code that "works" but doesn't match your project's style. It uses patterns that conflict with existing code. It makes decisions that violate unwritten team rules. - -**The Solution**: The `.trellis/spec/` directory contains project-specific guidelines. The `/before-*-dev` commands inject this specialized knowledge into AI context before coding starts. - -### Challenge 3: AI Context Window Is Limited - -Even after injecting guidelines, AI has limited context window. As conversation grows, earlier context (including guidelines) gets pushed out or becomes less influential. - -**The Problem**: AI starts following guidelines, but as the session progresses and context fills up, it "forgets" the rules and reverts to generic patterns. - -**The Solution**: The `/check-*` commands re-verify code against guidelines AFTER writing, catching drift that occurred during development. The `/trellis:finish-work` command does a final holistic review. - ---- - -## SYSTEM STRUCTURE - -``` -.trellis/ -|-- .developer # Your identity (gitignored) -|-- workflow.md # Complete workflow documentation -|-- workspace/ # "AI Memory" - session history -| |-- index.md # All developers' progress -| +-- {developer}/ # Per-developer directory -| |-- index.md # Personal progress index -| +-- journal-N.md # Session records (max 2000 lines) -|-- tasks/ # Task tracking (unified) -| +-- {MM}-{DD}-{slug}/ # Task directory -| |-- task.json # Task metadata -| +-- prd.md # Requirements doc -|-- spec/ # "AI Training Data" - project knowledge -| |-- frontend/ # Frontend conventions -| |-- backend/ # Backend conventions -| +-- guides/ # Thinking patterns -+-- scripts/ # Automation tools -``` - -### Understanding spec/ subdirectories - -**frontend/** - Single-layer frontend knowledge: -- Component patterns (how to write components in THIS project) -- State management rules (Redux? Zustand? Context?) -- Styling conventions (CSS modules? Tailwind? Styled-components?) -- Hook patterns (custom hooks, data fetching) - -**backend/** - Single-layer backend knowledge: -- API design patterns (REST? GraphQL? tRPC?) -- Database conventions (query patterns, migrations) -- Error handling standards -- Logging and monitoring rules - -**guides/** - Cross-layer thinking guides: -- Code reuse thinking guide -- Cross-layer thinking guide -- Pre-implementation checklists - ---- - -## COMMAND DEEP DIVE - -### /trellis:start - Restore AI Memory - -**WHY IT EXISTS**: -When a human engineer joins a project, they spend days/weeks learning: What is this project? What's been built? What's in progress? What's the current state? - -AI needs the same onboarding - but compressed into seconds at session start. - -**WHAT IT ACTUALLY DOES**: -1. Reads developer identity (who am I in this project?) -2. Checks git status (what branch? uncommitted changes?) -3. Reads recent session history from `workspace/` (what happened before?) -4. Identifies active features (what's in progress?) -5. Understands current project state before making any changes - -**WHY THIS MATTERS**: -- Without /trellis:start: AI is blind. It might work on wrong branch, conflict with others' work, or redo already-completed work. -- With /trellis:start: AI knows project context, can continue where previous session left off, avoids conflicts. - ---- - -### /trellis:before-dev - Inject Specialized Knowledge - -**WHY IT EXISTS**: -AI models have "pre-trained knowledge" - general patterns from millions of codebases. But YOUR project has specific conventions that differ from generic patterns. - -**WHAT IT ACTUALLY DOES**: -1. Discovers spec layers via `get_context.py --mode packages` and reads relevant guidelines -2. Loads project-specific patterns into AI's working context: - - Component naming conventions - - State management patterns - - Database query patterns - - Error handling standards - -**WHY THIS MATTERS**: -- Without before-dev: AI writes generic code that doesn't match project style. -- With before-dev: AI writes code that looks like the rest of the codebase. - ---- - -### /trellis:check - Combat Context Drift - -**WHY IT EXISTS**: -AI context window has limited capacity. As conversation progresses, guidelines injected at session start become less influential. This causes "context drift." - -**WHAT IT ACTUALLY DOES**: -1. Re-reads the guidelines that were injected earlier -2. Compares written code against those guidelines -3. Runs type checker and linter -4. Identifies violations and suggests fixes - -**WHY THIS MATTERS**: -- Without check-*: Context drift goes unnoticed, code quality degrades. -- With check-*: Drift is caught and corrected before commit. - ---- - -### /trellis:check-cross-layer - Multi-Dimension Verification - -**WHY IT EXISTS**: -Most bugs don't come from lack of technical skill - they come from "didn't think of it": -- Changed a constant in one place, missed 5 other places -- Modified database schema, forgot to update the API layer -- Created a utility function, but similar one already exists - -**WHAT IT ACTUALLY DOES**: -1. Identifies which dimensions your change involves -2. For each dimension, runs targeted checks: - - Cross-layer data flow - - Code reuse analysis - - Import path validation - - Consistency checks - ---- - -### /trellis:finish-work - Holistic Pre-Commit Review - -**WHY IT EXISTS**: -The `/check-*` commands focus on code quality within a single layer. But real changes often have cross-cutting concerns. - -**WHAT IT ACTUALLY DOES**: -1. Reviews all changes holistically -2. Checks cross-layer consistency -3. Identifies broader impacts -4. Checks if new patterns should be documented - ---- - -### /trellis:record-session - Persist Memory for Future - -**WHY IT EXISTS**: -All the context AI built during this session will be lost when session ends. The next session's `/trellis:start` needs this information. - -**WHAT IT ACTUALLY DOES**: -1. Records session summary to `workspace/{developer}/journal-N.md` -2. Captures what was done, learned, and what's remaining -3. Updates index files for quick lookup - ---- - -## REAL-WORLD WORKFLOW EXAMPLES - -### Example 1: Bug Fix Session - -**[1/8] /trellis:start** - AI needs project context before touching code -**[2/8] python3 ./.trellis/scripts/task.py create "Fix bug" --slug fix-bug** - Track work for future reference -**[3/8] /trellis:before-dev** - Inject project-specific development guidelines -**[4/8] Investigate and fix the bug** - Actual development work -**[5/8] /trellis:check** - Re-verify code against guidelines -**[6/8] /trellis:finish-work** - Holistic cross-layer review -**[7/8] Human tests and commits** - Human validates before code enters repo -**[8/8] /trellis:record-session** - Persist memory for future sessions - -### Example 2: Planning Session (No Code) - -**[1/4] /trellis:start** - Context needed even for non-coding work -**[2/4] python3 ./.trellis/scripts/task.py create "Planning task" --slug planning-task** - Planning is valuable work -**[3/4] Review docs, create subtask list** - Actual planning work -**[4/4] /trellis:record-session (with --summary)** - Planning decisions must be recorded - -### Example 3: Code Review Fixes - -**[1/6] /trellis:start** - Resume context from previous session -**[2/6] /trellis:before-dev** - Re-inject guidelines before fixes -**[3/6] Fix each CR issue** - Address feedback with guidelines in context -**[4/6] /trellis:check** - Verify fixes did not introduce new issues -**[5/6] /trellis:finish-work** - Document lessons from CR -**[6/6] Human commits, then /trellis:record-session** - Preserve CR lessons - -### Example 4: Large Refactoring - -**[1/5] /trellis:start** - Clear baseline before major changes -**[2/5] Plan phases** - Break into verifiable chunks -**[3/5] Execute phase by phase with /trellis:check after each** - Incremental verification -**[4/5] /trellis:finish-work** - Check if new patterns should be documented -**[5/5] Record with multiple commit hashes** - Link all commits to one feature - -### Example 5: Debug Session - -**[1/6] /trellis:start** - See if this bug was investigated before -**[2/6] /trellis:before-dev** - Guidelines might document known gotchas -**[3/6] Investigation** - Actual debugging work -**[4/6] /trellis:check** - Verify debug changes do not break other things -**[5/6] /trellis:finish-work** - Debug findings might need documentation -**[6/6] Human commits, then /trellis:record-session** - Debug knowledge is valuable - ---- - -## KEY RULES TO EMPHASIZE - -1. **AI NEVER commits** - Human tests and approves. AI prepares, human validates. -2. **Guidelines before code** - /before-dev command injects project knowledge. -3. **Check after code** - /check-* commands catch context drift. -4. **Record everything** - /trellis:record-session persists memory. - ---- - -# PART 3: Customize Your Development Guidelines - -After explaining Part 1 and Part 2, check if the project's development guidelines need customization. - -## Step 1: Check Current Guidelines Status - -Check if `.trellis/spec/` contains empty templates or customized guidelines: - -```bash -# Check if files are still empty templates (look for placeholder text) -grep -l "To be filled by the team" .trellis/spec/backend/*.md 2>/dev/null | wc -l -grep -l "To be filled by the team" .trellis/spec/frontend/*.md 2>/dev/null | wc -l -``` - -## Step 2: Determine Situation - -**Situation A: First-time setup (empty templates)** - -If guidelines are empty templates (contain "To be filled by the team"), this is the first time using Trellis in this project. - -Explain to the developer: - -"I see that the development guidelines in `.trellis/spec/` are still empty templates. This is normal for a new Trellis setup! - -The templates contain placeholder text that needs to be replaced with YOUR project's actual conventions. Without this, `/before-*-dev` commands won't provide useful guidance. - -**Your first task should be to fill in these guidelines:** - -1. Look at your existing codebase -2. Identify the patterns and conventions already in use -3. Document them in the guideline files - -For example, for `.trellis/spec/backend/database-guidelines.md`: -- What ORM/query library does your project use? -- How are migrations managed? -- What naming conventions for tables/columns? - -Would you like me to help you analyze your codebase and fill in these guidelines?" - -**Situation B: Guidelines already customized** - -If guidelines have real content (no "To be filled" placeholders), this is an existing setup. - -Explain to the developer: - -"Great! Your team has already customized the development guidelines. You can start using `/before-*-dev` commands right away. - -I recommend reading through `.trellis/spec/` to familiarize yourself with the team's coding standards." - -## Step 3: Help Fill Guidelines (If Empty) - -If the developer wants help filling guidelines, create a feature to track this: - -```bash -python3 ./.trellis/scripts/task.py create "Fill spec guidelines" --slug fill-spec-guidelines -``` - -Then systematically analyze the codebase and fill each guideline file: - -1. **Analyze the codebase** - Look at existing code patterns -2. **Document conventions** - Write what you observe, not ideals -3. **Include examples** - Reference actual files in the project -4. **List forbidden patterns** - Document anti-patterns the team avoids - -Work through one file at a time: -- `backend/directory-structure.md` -- `backend/database-guidelines.md` -- `backend/error-handling.md` -- `backend/quality-guidelines.md` -- `backend/logging-guidelines.md` -- `frontend/directory-structure.md` -- `frontend/component-guidelines.md` -- `frontend/hook-guidelines.md` -- `frontend/state-management.md` -- `frontend/quality-guidelines.md` -- `frontend/type-safety.md` - ---- - -## Completing the Onboard Session - -After covering all three parts, summarize: - -"You're now onboarded to the Trellis workflow system! Here's what we covered: -- Part 1: Core concepts (why this workflow exists) -- Part 2: Real-world examples (how to apply the workflow) -- Part 3: Guidelines status (empty templates need filling / already customized) - -**Next steps** (tell user): -1. Run `/trellis:record-session` to record this onboard session -2. [If guidelines empty] Start filling in `.trellis/spec/` guidelines -3. [If guidelines ready] Start your first development task - -What would you like to do first?" diff --git a/.claude/commands/trellis/parallel.md b/.claude/commands/trellis/parallel.md deleted file mode 100644 index 0be6dc69..00000000 --- a/.claude/commands/trellis/parallel.md +++ /dev/null @@ -1,192 +0,0 @@ -# Multi-Agent Pipeline Orchestrator - -You are the Multi-Agent Pipeline Orchestrator Agent, running in the main repository, responsible for collaborating with users to manage parallel development tasks. - -## Role Definition - -- **You are in the main repository**, not in a worktree -- **You don't write code directly** - code work is done by agents in worktrees -- **You are responsible for planning and dispatching**: discuss requirements, create plans, configure context, start worktree agents -- **Delegate complex analysis to research agent**: finding specs, analyzing code structure - ---- - -## Operation Types - -Operations in this document are categorized as: - -| Marker | Meaning | Executor | -|--------|---------|----------| -| `[AI]` | Bash scripts or Task calls executed by AI | You (AI) | -| `[USER]` | Slash commands executed by user | User | - ---- - -## Startup Flow - -### Step 1: Understand Trellis Workflow `[AI]` - -First, read the workflow guide to understand the development process: - -```bash -cat .trellis/workflow.md # Development process, conventions, and quick start guide -``` - -### Step 2: Get Current Status `[AI]` - -```bash -python3 ./.trellis/scripts/get_context.py -``` - -### Step 3: Read Project Guidelines `[AI]` - -```bash -python3 ./.trellis/scripts/get_context.py --mode packages # Discover available spec layers -cat .trellis/spec/guides/index.md # Thinking guides -``` - -### Step 4: Ask User for Requirements - -Ask the user: - -1. What feature to develop? -2. Which modules are involved? -3. Development type? (backend / frontend / fullstack) - ---- - -## Planning: Choose Your Approach - -Based on requirement complexity, choose one of these approaches: - -### Option A: Plan Agent (Recommended for complex features) `[AI]` - -Use when: -- Requirements need analysis and validation -- Multiple modules or cross-layer changes -- Unclear scope that needs research - -```bash -python3 ./.trellis/scripts/multi_agent/plan.py \ - --name "" \ - --type "" \ - --requirement "" -``` - -Plan Agent will: -1. Evaluate requirement validity (may reject if unclear/too large) -2. Call research agent to analyze codebase -3. Create and configure task directory -4. Write prd.md with acceptance criteria -5. Output ready-to-use task directory - -After plan.py completes, start the worktree agent: - -```bash -python3 ./.trellis/scripts/multi_agent/start.py "$TASK_DIR" -``` - -### Option B: Manual Configuration (For simple/clear features) `[AI]` - -Use when: -- Requirements are already clear and specific -- You know exactly which files are involved -- Simple, well-scoped changes - -#### Step 1: Create Task Directory - -```bash -# title is task description, --slug for task directory name -TASK_DIR=$(python3 ./.trellis/scripts/task.py create "" --slug <task-name>) -``` - -#### Step 2: Configure Task - -```bash -# Initialize jsonl context files -python3 ./.trellis/scripts/task.py init-context "$TASK_DIR" <dev_type> - -# Set branch and scope -python3 ./.trellis/scripts/task.py set-branch "$TASK_DIR" feature/<name> -python3 ./.trellis/scripts/task.py set-scope "$TASK_DIR" <scope> -``` - -#### Step 3: Add Context (optional: use research agent) - -```bash -python3 ./.trellis/scripts/task.py add-context "$TASK_DIR" implement "<path>" "<reason>" -python3 ./.trellis/scripts/task.py add-context "$TASK_DIR" check "<path>" "<reason>" -``` - -#### Step 4: Create prd.md - -```bash -cat > "$TASK_DIR/prd.md" << 'EOF' -# Feature: <name> - -## Requirements -- ... - -## Acceptance Criteria -- ... -EOF -``` - -#### Step 5: Validate and Start - -```bash -python3 ./.trellis/scripts/task.py validate "$TASK_DIR" -python3 ./.trellis/scripts/multi_agent/start.py "$TASK_DIR" -``` - ---- - -## After Starting: Report Status - -Tell the user the agent has started and provide monitoring commands. - ---- - -## User Available Commands `[USER]` - -The following slash commands are for users (not AI): - -| Command | Description | -|---------|-------------| -| `/trellis:parallel` | Start Multi-Agent Pipeline (this command) | -| `/trellis:start` | Start normal development mode (single process) | -| `/trellis:record-session` | Record session progress | -| `/trellis:finish-work` | Pre-completion checklist | - ---- - -## Monitoring Commands (for user reference) - -Tell the user they can use these commands to monitor: - -```bash -python3 ./.trellis/scripts/multi_agent/status.py # Overview -python3 ./.trellis/scripts/multi_agent/status.py --log <name> # View log -python3 ./.trellis/scripts/multi_agent/status.py --watch <name> # Real-time monitoring -python3 ./.trellis/scripts/multi_agent/cleanup.py <branch> # Cleanup worktree -``` - ---- - -## Pipeline Phases - -The dispatch agent in worktree will automatically execute: - -1. implement → Implement feature -2. check → Check code quality -3. finish → Final verification -4. create-pr → Create PR - ---- - -## Core Rules - -- **Don't write code directly** - delegate to agents in worktree -- **Don't execute git commit** - agent does it via create-pr action -- **Delegate complex analysis to research** - finding specs, analyzing code structure -- **All sub agents use opus model** - ensure output quality diff --git a/.claude/commands/trellis/record-session.md b/.claude/commands/trellis/record-session.md deleted file mode 100644 index 8bea4f9b..00000000 --- a/.claude/commands/trellis/record-session.md +++ /dev/null @@ -1,62 +0,0 @@ -[!] **Prerequisite**: This command should only be used AFTER the human has tested and committed the code. - -**Do NOT run `git commit` directly** — the scripts below handle their own commits for `.trellis/` metadata. You only need to read git history (`git log`, `git status`, `git diff`) and run the Python scripts. - ---- - -## Record Work Progress - -### Step 1: Get Context & Check Tasks - -```bash -python3 ./.trellis/scripts/get_context.py --mode record -``` - -[!] Archive tasks whose work is **actually done** — judge by work status, not the `status` field in task.json: -- Code committed? → Archive it (don't wait for PR) -- All acceptance criteria met? → Archive it -- Don't skip archiving just because `status` still says `planning` or `in_progress` - -```bash -python3 ./.trellis/scripts/task.py archive <task-name> -``` - -### Step 2: One-Click Add Session - -```bash -# Method 1: Simple parameters -python3 ./.trellis/scripts/add_session.py \ - --title "Session Title" \ - --commit "hash1,hash2" \ - --summary "Brief summary of what was done" - -# Method 2: Pass detailed content via stdin -cat << 'EOF' | python3 ./.trellis/scripts/add_session.py --stdin --title "Title" --commit "hash" -| Feature | Description | -|---------|-------------| -| New API | Added user authentication endpoint | -| Frontend | Updated login form | - -**Updated Files**: -- `packages/api/modules/auth/router.ts` -- `apps/web/modules/auth/components/login-form.tsx` -EOF -``` - -**Auto-completes**: -- [OK] Appends session to journal-N.md -- [OK] Auto-detects line count, creates new file if >2000 lines -- [OK] Auto-detects Branch context (`--branch` override; otherwise Branch = task.json -> current git branch; missing values are omitted gracefully) -- [OK] Updates index.md (Total Sessions +1, Last Active, line stats, history) -- [OK] Auto-commits .trellis/workspace and .trellis/tasks changes - ---- - -## Script Command Reference - -| Command | Purpose | -|---------|---------| -| `python3 ./.trellis/scripts/get_context.py --mode record` | Get context for record-session | -| `python3 ./.trellis/scripts/add_session.py --title "..." --commit "..."` | **One-click add session (recommended, branch auto-complete)** | -| `python3 ./.trellis/scripts/task.py archive <name>` | Archive completed task (auto-commits) | -| `python3 ./.trellis/scripts/task.py list` | List active tasks | diff --git a/.claude/commands/trellis/start.md b/.claude/commands/trellis/start.md deleted file mode 100644 index 1815359d..00000000 --- a/.claude/commands/trellis/start.md +++ /dev/null @@ -1,393 +0,0 @@ -# Start Session - -Initialize your AI development session and begin working on tasks. - ---- - -## Operation Types - -| Marker | Meaning | Executor | -|--------|---------|----------| -| `[AI]` | Bash scripts or Task calls executed by AI | You (AI) | -| `[USER]` | Slash commands executed by user | User | - ---- - -## Initialization `[AI]` - -### Step 1: Understand Development Workflow - -First, read the workflow guide to understand the development process: - -```bash -cat .trellis/workflow.md -``` - -**Follow the instructions in workflow.md** - it contains: -- Core principles (Read Before Write, Follow Standards, etc.) -- File system structure -- Development process -- Best practices - -### Step 2: Get Current Context - -```bash -python3 ./.trellis/scripts/get_context.py -``` - -This shows: developer identity, git status, current task (if any), active tasks. - -### Step 3: Read Guidelines Index - -```bash -python3 ./.trellis/scripts/get_context.py --mode packages -``` - -This shows available packages and their spec layers. Read the relevant spec indexes: - -```bash -cat .trellis/spec/<package>/<layer>/index.md # Package-specific guidelines -cat .trellis/spec/guides/index.md # Thinking guides (always read) -``` - -> **Important**: The index files are navigation — they list the actual guideline files (e.g., `error-handling.md`, `conventions.md`, `mock-strategies.md`). -> At this step, just read the indexes to understand what's available. -> When you start actual development, you MUST go back and read the specific guideline files relevant to your task, as listed in the index's Pre-Development Checklist. - -### Step 4: Report and Ask - -Report what you learned and ask: "What would you like to work on?" - ---- - -## Task Classification - -When user describes a task, classify it: - -| Type | Criteria | Workflow | -|------|----------|----------| -| **Question** | User asks about code, architecture, or how something works | Answer directly | -| **Trivial Fix** | Typo fix, comment update, single-line change | Direct Edit | -| **Simple Task** | Clear goal, 1-2 files, well-defined scope | Quick confirm → Implement | -| **Complex Task** | Vague goal, multiple files, architectural decisions | **Brainstorm → Task Workflow** | - -### Classification Signals - -**Trivial/Simple indicators:** -- User specifies exact file and change -- "Fix the typo in X" -- "Add field Y to component Z" -- Clear acceptance criteria already stated - -**Complex indicators:** -- "I want to add a feature for..." -- "Can you help me improve..." -- Mentions multiple areas or systems -- No clear implementation path -- User seems unsure about approach - -### Decision Rule - -> **If in doubt, use Brainstorm + Task Workflow.** -> -> Task Workflow ensures code-spec context is injected to agents, resulting in higher quality code. -> The overhead is minimal, but the benefit is significant. - ---- - -## Question / Trivial Fix - -For questions or trivial fixes, work directly: - -1. Answer question or make the fix -2. If code was changed, remind user to run `/trellis:finish-work` - ---- - -## Simple Task - -For simple, well-defined tasks: - -1. Quick confirm: "I understand you want to [goal]. Shall I proceed?" -2. If no, clarify and confirm again -3. **If yes: execute ALL steps below without stopping. Do NOT ask for additional confirmation between steps.** - - Create task directory (Phase 1 Path B, Step 2) - - Write PRD (Step 3) - - Research codebase (Phase 2, Step 5) - - Configure context (Step 6) - - Activate task (Step 7) - - Implement (Phase 3, Step 8) - - Check quality (Step 9) - - Complete (Step 10) - ---- - -## Complex Task - Brainstorm First - -For complex or vague tasks, **automatically start the brainstorm process** — do NOT skip directly to implementation. - -See `/trellis:brainstorm` for the full process. Summary: - -1. **Acknowledge and classify** - State your understanding -2. **Create task directory** - Track evolving requirements in `prd.md` -3. **Ask questions one at a time** - Update PRD after each answer -4. **Propose approaches** - For architectural decisions -5. **Confirm final requirements** - Get explicit approval -6. **Proceed to Task Workflow** - With clear requirements in PRD - -> **Subtask Decomposition**: If brainstorm reveals multiple independent work items, -> consider creating subtasks using `--parent` flag or `add-subtask` command. -> See `/trellis:brainstorm` Step 8 for details. - -### Key Brainstorm Principles - -| Principle | Description | -|-----------|-------------| -| **One question at a time** | Never overwhelm with multiple questions | -| **Update PRD immediately** | After each answer, update the document | -| **Prefer multiple choice** | Easier for users to answer | -| **YAGNI** | Challenge unnecessary complexity | - ---- - -## Task Workflow (Development Tasks) - -**Why this workflow?** -- Research Agent analyzes what code-spec files are needed -- Code-spec files are configured in jsonl files -- Implement Agent receives code-spec context via Hook injection -- Check Agent verifies against code-spec requirements -- Result: Code that follows project conventions automatically - -### Overview: Two Entry Points - -``` -From Brainstorm (Complex Task): - PRD confirmed → Research → Configure Context → Activate → Implement → Check → Complete - -From Simple Task: - Confirm → Create Task → Write PRD → Research → Configure Context → Activate → Implement → Check → Complete -``` - -**Key principle: Research happens AFTER requirements are clear (PRD exists).** - ---- - -### Phase 1: Establish Requirements - -#### Path A: From Brainstorm (skip to Phase 2) - -PRD and task directory already exist from brainstorm. Skip directly to Phase 2. - -#### Path B: From Simple Task - -**Step 1: Confirm Understanding** `[AI]` - -Quick confirm: -- What is the goal? -- What type of development? (frontend / backend / fullstack) -- Any specific requirements or constraints? - -**Step 2: Create Task Directory** `[AI]` - -```bash -TASK_DIR=$(python3 ./.trellis/scripts/task.py create "<title>" --slug <name>) -``` - -**Step 3: Write PRD** `[AI]` - -Create `prd.md` in the task directory with: - -```markdown -# <Task Title> - -## Goal -<What we're trying to achieve> - -## Requirements -- <Requirement 1> -- <Requirement 2> - -## Acceptance Criteria -- [ ] <Criterion 1> -- [ ] <Criterion 2> - -## Technical Notes -<Any technical decisions or constraints> -``` - ---- - -### Phase 2: Prepare for Implementation (shared) - -> Both paths converge here. PRD and task directory must exist before proceeding. - -**Step 4: Code-Spec Depth Check** `[AI]` - -If the task touches infra or cross-layer contracts, do not start implementation until code-spec depth is defined. - -Trigger this requirement when the change includes any of: -- New or changed command/API signatures -- Database schema or migration changes -- Infra integrations (storage, queue, cache, secrets, env contracts) -- Cross-layer payload transformations - -Must-have before proceeding: -- [ ] Target code-spec files to update are identified -- [ ] Concrete contract is defined (signature, fields, env keys) -- [ ] Validation and error matrix is defined -- [ ] At least one Good/Base/Bad case is defined - -**Step 5: Research the Codebase** `[AI]` - -Based on the confirmed PRD, call Research Agent to find relevant specs and patterns: - -``` -Task( - subagent_type: "research", - prompt: "Analyze the codebase for this task: - - Task: <goal from PRD> - Type: <frontend/backend/fullstack> - - Please find: - 1. Relevant code-spec files in .trellis/spec/ - 2. Existing code patterns to follow (find 2-3 examples) - 3. Files that will likely need modification - - Output: - ## Relevant Code-Specs - - <path>: <why it's relevant> - - ## Code Patterns Found - - <pattern>: <example file path> - - ## Files to Modify - - <path>: <what change>", - model: "opus" -) -``` - -**Step 6: Configure Context** `[AI]` - -Initialize default context: - -```bash -python3 ./.trellis/scripts/task.py init-context "$TASK_DIR" <type> -# type: backend | frontend | fullstack -``` - -Add code-spec files found by Research Agent: - -```bash -# For each relevant code-spec and code pattern: -python3 ./.trellis/scripts/task.py add-context "$TASK_DIR" implement "<path>" "<reason>" -python3 ./.trellis/scripts/task.py add-context "$TASK_DIR" check "<path>" "<reason>" -``` - -**Step 7: Activate Task** `[AI]` - -```bash -python3 ./.trellis/scripts/task.py start "$TASK_DIR" -``` - -This sets `.current-task` so hooks can inject context. - ---- - -### Phase 3: Execute (shared) - -**Step 8: Implement** `[AI]` - -Call Implement Agent (code-spec context is auto-injected by hook): - -``` -Task( - subagent_type: "implement", - prompt: "Implement the task described in prd.md. - - Follow all code-spec files that have been injected into your context. - Run lint and typecheck before finishing.", - model: "opus" -) -``` - -**Step 9: Check Quality** `[AI]` - -Call Check Agent (code-spec context is auto-injected by hook): - -``` -Task( - subagent_type: "check", - prompt: "Review all code changes against the code-spec requirements. - - Fix any issues you find directly. - Ensure lint and typecheck pass.", - model: "opus" -) -``` - -**Step 10: Complete** `[AI]` - -1. Verify lint and typecheck pass -2. Report what was implemented -3. Remind user to: - - Test the changes - - Commit when ready - - Run `/trellis:record-session` to record this session - ---- - -## Continuing Existing Task - -If `get_context.py` shows a current task: - -1. Read the task's `prd.md` to understand the goal -2. Check `task.json` for current status and phase -3. Ask user: "Continue working on <task-name>?" - -If yes, resume from the appropriate step (usually Step 7 or 8). - ---- - -## Commands Reference - -### User Commands `[USER]` - -| Command | When to Use | -|---------|-------------| -| `/trellis:start` | Begin a session (this command) | -| `/trellis:brainstorm` | Clarify vague requirements (called from start) | -| `/trellis:parallel` | Complex tasks needing isolated worktree | -| `/trellis:finish-work` | Before committing changes | -| `/trellis:record-session` | After completing a task | - -### AI Scripts `[AI]` - -| Script | Purpose | -|--------|---------| -| `python3 ./.trellis/scripts/get_context.py` | Get session context | -| `python3 ./.trellis/scripts/task.py create` | Create task directory | -| `python3 ./.trellis/scripts/task.py init-context` | Initialize jsonl files | -| `python3 ./.trellis/scripts/task.py add-context` | Add code-spec/context file to jsonl | -| `python3 ./.trellis/scripts/task.py start` | Set current task | -| `python3 ./.trellis/scripts/task.py finish` | Clear current task | -| `python3 ./.trellis/scripts/task.py archive` | Archive completed task | - -### Sub Agents `[AI]` - -| Agent | Purpose | Hook Injection | -|-------|---------|----------------| -| research | Analyze codebase | No (reads directly) | -| implement | Write code | Yes (implement.jsonl) | -| check | Review & fix | Yes (check.jsonl) | -| debug | Fix specific issues | Yes (debug.jsonl) | - ---- - -## Key Principle - -> **Code-spec context is injected, not remembered.** -> -> The Task Workflow ensures agents receive relevant code-spec context automatically. -> This is more reliable than hoping the AI "remembers" conventions. diff --git a/.claude/commands/trellis/update-spec.md b/.claude/commands/trellis/update-spec.md deleted file mode 100644 index 3f0b2e77..00000000 --- a/.claude/commands/trellis/update-spec.md +++ /dev/null @@ -1,354 +0,0 @@ -# Update Code-Spec - Capture Executable Contracts - -When you learn something valuable (from debugging, implementing, or discussion), use this command to update the relevant code-spec documents. - -**Timing**: After completing a task, fixing a bug, or discovering a new pattern - ---- - -## Code-Spec First Rule (CRITICAL) - -In this project, "spec" for implementation work means **code-spec**: -- Executable contracts (not principle-only text) -- Concrete signatures, payload fields, env keys, and boundary behavior -- Testable validation/error behavior - -If the change touches infra or cross-layer contracts, code-spec depth is mandatory. - -### Mandatory Triggers - -Apply code-spec depth when the change includes any of: -- New/changed command or API signature -- Cross-layer request/response contract change -- Database schema/migration change -- Infra integration (storage, queue, cache, secrets, env wiring) - -### Mandatory Output (7 Sections) - -For triggered tasks, include all sections below: -1. Scope / Trigger -2. Signatures (command/API/DB) -3. Contracts (request/response/env) -4. Validation & Error Matrix -5. Good/Base/Bad Cases -6. Tests Required (with assertion points) -7. Wrong vs Correct (at least one pair) - ---- - -## When to Update Code-Specs - -| Trigger | Example | Target Spec | -|---------|---------|-------------| -| **Implemented a feature** | Added template download with giget | Relevant `backend/` or `frontend/` file | -| **Made a design decision** | Used type field + mapping table for extensibility | Relevant code-spec + "Design Decisions" section | -| **Fixed a bug** | Found a subtle issue with error handling | `backend/error-handling.md` | -| **Discovered a pattern** | Found a better way to structure code | Relevant `backend/` or `frontend/` file | -| **Hit a gotcha** | Learned that X must be done before Y | Relevant code-spec + "Common Mistakes" section | -| **Established a convention** | Team agreed on naming pattern | `quality-guidelines.md` | -| **New thinking trigger** | "Don't forget to check X before doing Y" | `guides/*.md` (as a checklist item, not detailed rules) | - -**Key Insight**: Code-spec updates are NOT just for problems. Every feature implementation contains design decisions and contracts that future AI/developers need to execute safely. - ---- - -## Spec Structure Overview - -``` -.trellis/spec/ -├── backend/ # Backend coding standards -│ ├── index.md # Overview and links -│ └── *.md # Topic-specific guidelines -├── frontend/ # Frontend coding standards -│ ├── index.md # Overview and links -│ └── *.md # Topic-specific guidelines -└── guides/ # Thinking checklists (NOT coding specs!) - ├── index.md # Guide index - └── *.md # Topic-specific guides -``` - -### CRITICAL: Code-Spec vs Guide - Know the Difference - -| Type | Location | Purpose | Content Style | -|------|----------|---------|---------------| -| **Code-Spec** | `backend/*.md`, `frontend/*.md` | Tell AI "how to implement safely" | Signatures, contracts, matrices, cases, test points | -| **Guide** | `guides/*.md` | Help AI "what to think about" | Checklists, questions, pointers to specs | - -**Decision Rule**: Ask yourself: - -- "This is **how to write** the code" → Put in `backend/` or `frontend/` -- "This is **what to consider** before writing" → Put in `guides/` - -**Example**: - -| Learning | Wrong Location | Correct Location | -|----------|----------------|------------------| -| "Use `reconfigure()` not `TextIOWrapper` for Windows stdout" | ❌ `guides/cross-platform-thinking-guide.md` | ✅ `backend/script-conventions.md` | -| "Remember to check encoding when writing cross-platform code" | ❌ `backend/script-conventions.md` | ✅ `guides/cross-platform-thinking-guide.md` | - -**Guides should be short checklists that point to specs**, not duplicate the detailed rules. - ---- - -## Update Process - -### Step 1: Identify What You Learned - -Answer these questions: - -1. **What did you learn?** (Be specific) -2. **Why is it important?** (What problem does it prevent?) -3. **Where does it belong?** (Which spec file?) - -### Step 2: Classify the Update Type - -| Type | Description | Action | -|------|-------------|--------| -| **Design Decision** | Why we chose approach X over Y | Add to "Design Decisions" section | -| **Project Convention** | How we do X in this project | Add to relevant section with examples | -| **New Pattern** | A reusable approach discovered | Add to "Patterns" section | -| **Forbidden Pattern** | Something that causes problems | Add to "Anti-patterns" or "Don't" section | -| **Common Mistake** | Easy-to-make error | Add to "Common Mistakes" section | -| **Convention** | Agreed-upon standard | Add to relevant section | -| **Gotcha** | Non-obvious behavior | Add warning callout | - -### Step 3: Read the Target Code-Spec - -Before editing, read the current code-spec to: -- Understand existing structure -- Avoid duplicating content -- Find the right section for your update - -```bash -cat .trellis/spec/<category>/<file>.md -``` - -### Step 4: Make the Update - -Follow these principles: - -1. **Be Specific**: Include concrete examples, not just abstract rules -2. **Explain Why**: State the problem this prevents -3. **Show Contracts**: Add signatures, payload fields, and error behavior -4. **Show Code**: Add code snippets for key patterns -5. **Keep it Short**: One concept per section - -### Step 5: Update the Index (if needed) - -If you added a new section or the code-spec status changed, update the category's `index.md`. - ---- - -## Update Templates - -### Mandatory Template for Infra/Cross-Layer Work - -```markdown -## Scenario: <name> - -### 1. Scope / Trigger -- Trigger: <why this requires code-spec depth> - -### 2. Signatures -- Backend command/API/DB signature(s) - -### 3. Contracts -- Request fields (name, type, constraints) -- Response fields (name, type, constraints) -- Environment keys (required/optional) - -### 4. Validation & Error Matrix -- <condition> -> <error> - -### 5. Good/Base/Bad Cases -- Good: ... -- Base: ... -- Bad: ... - -### 6. Tests Required -- Unit/Integration/E2E with assertion points - -### 7. Wrong vs Correct -#### Wrong -... -#### Correct -... -``` - -### Adding a Design Decision - -```markdown -### Design Decision: [Decision Name] - -**Context**: What problem were we solving? - -**Options Considered**: -1. Option A - brief description -2. Option B - brief description - -**Decision**: We chose Option X because... - -**Example**: -\`\`\`typescript -// How it's implemented -code example -\`\`\` - -**Extensibility**: How to extend this in the future... -``` - -### Adding a Project Convention - -```markdown -### Convention: [Convention Name] - -**What**: Brief description of the convention. - -**Why**: Why we do it this way in this project. - -**Example**: -\`\`\`typescript -// How to follow this convention -code example -\`\`\` - -**Related**: Links to related conventions or specs. -``` - -### Adding a New Pattern - -```markdown -### Pattern Name - -**Problem**: What problem does this solve? - -**Solution**: Brief description of the approach. - -**Example**: -\`\`\` -// Good -code example - -// Bad -code example -\`\`\` - -**Why**: Explanation of why this works better. -``` - -### Adding a Forbidden Pattern - -```markdown -### Don't: Pattern Name - -**Problem**: -\`\`\` -// Don't do this -bad code example -\`\`\` - -**Why it's bad**: Explanation of the issue. - -**Instead**: -\`\`\` -// Do this instead -good code example -\`\`\` -``` - -### Adding a Common Mistake - -```markdown -### Common Mistake: Description - -**Symptom**: What goes wrong - -**Cause**: Why this happens - -**Fix**: How to correct it - -**Prevention**: How to avoid it in the future -``` - -### Adding a Gotcha - -```markdown -> **Warning**: Brief description of the non-obvious behavior. -> -> Details about when this happens and how to handle it. -``` - ---- - -## Interactive Mode - -If you're unsure what to update, answer these prompts: - -1. **What did you just finish?** - - [ ] Fixed a bug - - [ ] Implemented a feature - - [ ] Refactored code - - [ ] Had a discussion about approach - -2. **What did you learn or decide?** - - Design decision (why X over Y) - - Project convention (how we do X) - - Non-obvious behavior (gotcha) - - Better approach (pattern) - -3. **Would future AI/developers need to know this?** - - To understand how the code works → Yes, update spec - - To maintain or extend the feature → Yes, update spec - - To avoid repeating mistakes → Yes, update spec - - Purely one-off implementation detail → Maybe skip - -4. **Which area does it relate to?** - - [ ] Backend code - - [ ] Frontend code - - [ ] Cross-layer data flow - - [ ] Code organization/reuse - - [ ] Quality/testing - ---- - -## Quality Checklist - -Before finishing your code-spec update: - -- [ ] Is the content specific and actionable? -- [ ] Did you include a code example? -- [ ] Did you explain WHY, not just WHAT? -- [ ] Did you include executable signatures/contracts? -- [ ] Did you include validation and error matrix? -- [ ] Did you include Good/Base/Bad cases? -- [ ] Did you include required tests with assertion points? -- [ ] Is it in the right code-spec file? -- [ ] Does it duplicate existing content? -- [ ] Would a new team member understand it? - ---- - -## Relationship to Other Commands - -``` -Development Flow: - Learn something → /trellis:update-spec → Knowledge captured - ↑ ↓ - /trellis:break-loop ←──────────────────── Future sessions benefit - (deep bug analysis) -``` - -- `/trellis:break-loop` - Analyzes bugs deeply, often reveals spec updates needed -- `/trellis:update-spec` - Actually makes the updates (this command) -- `/trellis:finish-work` - Reminds you to check if specs need updates - ---- - -## Core Philosophy - -> **Code-specs are living documents. Every debugging session, every "aha moment" is an opportunity to make the implementation contract clearer.** - -The goal is **institutional memory**: -- What one person learns, everyone benefits from -- What AI learns in one session, persists to future sessions -- Mistakes become documented guardrails diff --git a/.claude/hooks/inject-subagent-context.py b/.claude/hooks/inject-subagent-context.py deleted file mode 100644 index f89b4c7c..00000000 --- a/.claude/hooks/inject-subagent-context.py +++ /dev/null @@ -1,803 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Multi-Agent Pipeline Context Injection Hook - -Core Design Philosophy: -- Dispatch becomes a pure dispatcher, only responsible for "calling subagents" -- Hook is responsible for injecting all context, subagent works autonomously with complete info -- Each agent has a dedicated jsonl file defining its context -- No resume needed, no segmentation, behavior controlled by code not prompt - -Trigger: PreToolUse (before Task tool call) - -Context Source: .trellis/.current-task points to task directory -- implement.jsonl - Implement agent dedicated context -- check.jsonl - Check agent dedicated context -- debug.jsonl - Debug agent dedicated context -- research.jsonl - Research agent dedicated context (optional, usually not needed) -- cr.jsonl - Code review dedicated context -- prd.md - Requirements document -- info.md - Technical design -- codex-review-output.txt - Code Review results -""" - -# IMPORTANT: Suppress all warnings FIRST -import warnings -warnings.filterwarnings("ignore") - -import json -import os -import sys -from pathlib import Path - -# IMPORTANT: Force stdout to use UTF-8 on Windows -# This fixes UnicodeEncodeError when outputting non-ASCII characters -if sys.platform == "win32": - import io as _io - if hasattr(sys.stdout, "reconfigure"): - sys.stdout.reconfigure(encoding="utf-8", errors="replace") # type: ignore[union-attr] - elif hasattr(sys.stdout, "detach"): - sys.stdout = _io.TextIOWrapper(sys.stdout.detach(), encoding="utf-8", errors="replace") # type: ignore[union-attr] - -# ============================================================================= -# Path Constants (change here to rename directories) -# ============================================================================= - -DIR_WORKFLOW = ".trellis" -DIR_WORKSPACE = "workspace" -DIR_TASKS = "tasks" -DIR_SPEC = "spec" -FILE_CURRENT_TASK = ".current-task" -FILE_TASK_JSON = "task.json" - -# Agents that don't update phase (can be called at any time) -AGENTS_NO_PHASE_UPDATE = {"debug", "research"} - -# ============================================================================= -# Subagent Constants (change here to rename subagent types) -# ============================================================================= - -AGENT_IMPLEMENT = "implement" -AGENT_CHECK = "check" -AGENT_DEBUG = "debug" -AGENT_RESEARCH = "research" - -# Agents that require a task directory -AGENTS_REQUIRE_TASK = (AGENT_IMPLEMENT, AGENT_CHECK, AGENT_DEBUG) -# All supported agents -AGENTS_ALL = (AGENT_IMPLEMENT, AGENT_CHECK, AGENT_DEBUG, AGENT_RESEARCH) - - -def find_repo_root(start_path: str) -> str | None: - """ - Find git repo root from start_path upwards - - Returns: - Repo root path, or None if not found - """ - current = Path(start_path).resolve() - while current != current.parent: - if (current / ".git").exists(): - return str(current) - current = current.parent - return None - - -def get_current_task(repo_root: str) -> str | None: - """ - Read current task directory path from .trellis/.current-task - - Returns: - Task directory relative path (relative to repo_root) - None if not set - """ - current_task_file = os.path.join(repo_root, DIR_WORKFLOW, FILE_CURRENT_TASK) - if not os.path.exists(current_task_file): - return None - - try: - with open(current_task_file, "r", encoding="utf-8") as f: - content = f.read().strip() - if not content: - return None - normalized = content.replace("\\", "/") - while normalized.startswith("./"): - normalized = normalized[2:] - if normalized.startswith("tasks/"): - normalized = f".trellis/{normalized}" - return normalized - except Exception: - return None - - -def update_current_phase(repo_root: str, task_dir: str, subagent_type: str) -> None: - """ - Update current_phase in task.json based on subagent_type. - - This ensures phase tracking is always accurate, regardless of whether - dispatch agent remembers to update it. - - Logic: - - Read next_action array from task.json - - Find the next phase whose action matches subagent_type - - Only move forward, never backward - - Some agents (debug, research) don't update phase - """ - if subagent_type in AGENTS_NO_PHASE_UPDATE: - return - - task_json_path = os.path.join(repo_root, task_dir, FILE_TASK_JSON) - if not os.path.exists(task_json_path): - return - - try: - with open(task_json_path, "r", encoding="utf-8") as f: - task_data = json.load(f) - - current_phase = task_data.get("current_phase", 0) - next_actions = task_data.get("next_action", []) - - # Map action names to subagent types - # "implement" -> "implement", "check" -> "check", "finish" -> "check" - action_to_agent = { - "implement": "implement", - "check": "check", - "finish": "check", # finish uses check agent - } - - # Find the next phase that matches this subagent_type - new_phase = None - for action in next_actions: - phase_num = action.get("phase", 0) - action_name = action.get("action", "") - expected_agent = action_to_agent.get(action_name) - - # Only consider phases after current_phase - if phase_num > current_phase and expected_agent == subagent_type: - new_phase = phase_num - break - - if new_phase is not None: - task_data["current_phase"] = new_phase - - with open(task_json_path, "w", encoding="utf-8") as f: - json.dump(task_data, f, indent=2, ensure_ascii=False) - except Exception: - # Don't fail the hook if phase update fails - pass - - -def read_file_content(base_path: str, file_path: str) -> str | None: - """Read file content, return None if file doesn't exist""" - full_path = os.path.join(base_path, file_path) - if os.path.exists(full_path) and os.path.isfile(full_path): - try: - with open(full_path, "r", encoding="utf-8") as f: - return f.read() - except Exception: - return None - return None - - -def read_directory_contents( - base_path: str, dir_path: str, max_files: int = 20 -) -> list[tuple[str, str]]: - """ - Read all .md files in a directory - - Args: - base_path: Base path (usually repo_root) - dir_path: Directory relative path - max_files: Max files to read (prevent huge directories) - - Returns: - [(file_path, content), ...] - """ - full_path = os.path.join(base_path, dir_path) - if not os.path.exists(full_path) or not os.path.isdir(full_path): - return [] - - results = [] - try: - # Only read .md files, sorted by filename - md_files = sorted( - [ - f - for f in os.listdir(full_path) - if f.endswith(".md") and os.path.isfile(os.path.join(full_path, f)) - ] - ) - - for filename in md_files[:max_files]: - file_full_path = os.path.join(full_path, filename) - relative_path = os.path.join(dir_path, filename) - try: - with open(file_full_path, "r", encoding="utf-8") as f: - content = f.read() - results.append((relative_path, content)) - except Exception: - continue - except Exception: - pass - - return results - - -def read_jsonl_entries(base_path: str, jsonl_path: str) -> list[tuple[str, str]]: - """ - Read all file/directory contents referenced in jsonl file - - Schema: - {"file": "path/to/file.md", "reason": "..."} - {"file": "path/to/dir/", "type": "directory", "reason": "..."} - - Returns: - [(path, content), ...] - """ - full_path = os.path.join(base_path, jsonl_path) - if not os.path.exists(full_path): - return [] - - results = [] - try: - with open(full_path, "r", encoding="utf-8") as f: - for line in f: - line = line.strip() - if not line: - continue - try: - item = json.loads(line) - file_path = item.get("file") or item.get("path") - entry_type = item.get("type", "file") - - if not file_path: - continue - - if entry_type == "directory": - # Read all .md files in directory - dir_contents = read_directory_contents(base_path, file_path) - results.extend(dir_contents) - else: - # Read single file - content = read_file_content(base_path, file_path) - if content: - results.append((file_path, content)) - except json.JSONDecodeError: - continue - except Exception: - pass - - return results - - -def get_agent_context(repo_root: str, task_dir: str, agent_type: str) -> str: - """ - Get complete context for specified agent - - Prioritize agent-specific jsonl, fallback to spec.jsonl if not exists - """ - context_parts = [] - - # 1. Try agent-specific jsonl - agent_jsonl = f"{task_dir}/{agent_type}.jsonl" - agent_entries = read_jsonl_entries(repo_root, agent_jsonl) - - # 2. If agent-specific jsonl doesn't exist or empty, fallback to spec.jsonl - if not agent_entries: - agent_entries = read_jsonl_entries(repo_root, f"{task_dir}/spec.jsonl") - - # 3. Add all files from jsonl - for file_path, content in agent_entries: - context_parts.append(f"=== {file_path} ===\n{content}") - - return "\n\n".join(context_parts) - - -def get_implement_context(repo_root: str, task_dir: str) -> str: - """ - Complete context for Implement Agent - - Read order: - 1. All files in implement.jsonl (dev specs) - 2. prd.md (requirements) - 3. info.md (technical design) - """ - context_parts = [] - - # 1. Read implement.jsonl (or fallback to spec.jsonl) - base_context = get_agent_context(repo_root, task_dir, "implement") - if base_context: - context_parts.append(base_context) - - # 2. Requirements document - prd_content = read_file_content(repo_root, f"{task_dir}/prd.md") - if prd_content: - context_parts.append(f"=== {task_dir}/prd.md (Requirements) ===\n{prd_content}") - - # 3. Technical design - info_content = read_file_content(repo_root, f"{task_dir}/info.md") - if info_content: - context_parts.append( - f"=== {task_dir}/info.md (Technical Design) ===\n{info_content}" - ) - - return "\n\n".join(context_parts) - - -def get_check_context(repo_root: str, task_dir: str) -> str: - """ - Complete context for Check Agent - - Read order: - 1. All files in check.jsonl (check specs + dev specs) - 2. prd.md (for understanding task intent) - """ - context_parts = [] - - # 1. Read check.jsonl (or fallback to spec.jsonl + hardcoded check files) - check_entries = read_jsonl_entries(repo_root, f"{task_dir}/check.jsonl") - - if check_entries: - for file_path, content in check_entries: - context_parts.append(f"=== {file_path} ===\n{content}") - else: - # Fallback: use hardcoded check files + spec.jsonl - check_files = [ - (".claude/commands/trellis/finish-work.md", "Finish work checklist"), - (".claude/commands/trellis/check-cross-layer.md", "Cross-layer check spec"), - (".claude/commands/trellis/check.md", "Code quality check spec"), - ] - for file_path, description in check_files: - content = read_file_content(repo_root, file_path) - if content: - context_parts.append(f"=== {file_path} ({description}) ===\n{content}") - - # Add spec.jsonl - spec_entries = read_jsonl_entries(repo_root, f"{task_dir}/spec.jsonl") - for file_path, content in spec_entries: - context_parts.append(f"=== {file_path} (Dev spec) ===\n{content}") - - # 2. Requirements document (for understanding task intent) - prd_content = read_file_content(repo_root, f"{task_dir}/prd.md") - if prd_content: - context_parts.append( - f"=== {task_dir}/prd.md (Requirements - for understanding intent) ===\n{prd_content}" - ) - - return "\n\n".join(context_parts) - - -def get_finish_context(repo_root: str, task_dir: str) -> str: - """ - Complete context for Finish phase (final check before PR) - - Read order: - 1. All files in finish.jsonl (if exists) - 2. Fallback to finish-work.md only (lightweight final check) - 3. update-spec.md (for active spec sync) - 4. prd.md (for verifying requirements are met) - """ - context_parts = [] - - # 1. Try finish.jsonl first - finish_entries = read_jsonl_entries(repo_root, f"{task_dir}/finish.jsonl") - - if finish_entries: - for file_path, content in finish_entries: - context_parts.append(f"=== {file_path} ===\n{content}") - else: - # Fallback: only finish-work.md (lightweight) - finish_work = read_file_content( - repo_root, ".claude/commands/trellis/finish-work.md" - ) - if finish_work: - context_parts.append( - f"=== .claude/commands/trellis/finish-work.md (Finish checklist) ===\n{finish_work}" - ) - - # 2. Spec update process (for active spec sync) - update_spec = read_file_content( - repo_root, ".claude/commands/trellis/update-spec.md" - ) - if update_spec: - context_parts.append( - f"=== .claude/commands/trellis/update-spec.md (Spec update process) ===\n{update_spec}" - ) - - # 3. Requirements document (for verifying requirements are met) - prd_content = read_file_content(repo_root, f"{task_dir}/prd.md") - if prd_content: - context_parts.append( - f"=== {task_dir}/prd.md (Requirements - verify all met) ===\n{prd_content}" - ) - - return "\n\n".join(context_parts) - - -def get_debug_context(repo_root: str, task_dir: str) -> str: - """ - Complete context for Debug Agent - - Read order: - 1. All files in debug.jsonl (specs needed for fixing) - 2. codex-review-output.txt (Codex Review results) - """ - context_parts = [] - - # 1. Read debug.jsonl (or fallback to spec.jsonl + hardcoded check files) - debug_entries = read_jsonl_entries(repo_root, f"{task_dir}/debug.jsonl") - - if debug_entries: - for file_path, content in debug_entries: - context_parts.append(f"=== {file_path} ===\n{content}") - else: - # Fallback: use spec.jsonl + hardcoded check files - spec_entries = read_jsonl_entries(repo_root, f"{task_dir}/spec.jsonl") - for file_path, content in spec_entries: - context_parts.append(f"=== {file_path} (Dev spec) ===\n{content}") - - check_files = [ - (".claude/commands/trellis/check.md", "Code quality check spec"), - (".claude/commands/trellis/check-cross-layer.md", "Cross-layer check spec"), - ] - for file_path, description in check_files: - content = read_file_content(repo_root, file_path) - if content: - context_parts.append(f"=== {file_path} ({description}) ===\n{content}") - - # 2. Codex review output (if exists) - codex_output = read_file_content(repo_root, f"{task_dir}/codex-review-output.txt") - if codex_output: - context_parts.append( - f"=== {task_dir}/codex-review-output.txt (Codex Review Results) ===\n{codex_output}" - ) - - return "\n\n".join(context_parts) - - -def build_implement_prompt(original_prompt: str, context: str) -> str: - """Build complete prompt for Implement""" - return f"""# Implement Agent Task - -You are the Implement Agent in the Multi-Agent Pipeline. - -## Your Context - -All the information you need has been prepared for you: - -{context} - ---- - -## Your Task - -{original_prompt} - ---- - -## Workflow - -1. **Understand specs** - All dev specs are injected above, understand them -2. **Understand requirements** - Read requirements document and technical design -3. **Implement feature** - Implement following specs and design -4. **Self-check** - Ensure code quality against check specs - -## Important Constraints - -- Do NOT execute git commit, only code modifications -- Follow all dev specs injected above -- Report list of modified/created files when done""" - - -def build_check_prompt(original_prompt: str, context: str) -> str: - """Build complete prompt for Check""" - return f"""# Check Agent Task - -You are the Check Agent in the Multi-Agent Pipeline (code and cross-layer checker). - -## Your Context - -All check specs and dev specs you need: - -{context} - ---- - -## Your Task - -{original_prompt} - ---- - -## Workflow - -1. **Get changes** - Run `git diff --name-only` and `git diff` to get code changes -2. **Check against specs** - Check item by item against specs above -3. **Self-fix** - Fix issues directly, don't just report -4. **Run verification** - Run project's lint and typecheck commands - -## Important Constraints - -- Fix issues yourself, don't just report -- Must execute complete checklist in check specs -- Pay special attention to impact radius analysis (L1-L5)""" - - -def build_finish_prompt(original_prompt: str, context: str) -> str: - """Build complete prompt for Finish (final check before PR)""" - return f"""# Finish Agent Task - -You are performing the final check before creating a PR. - -## Your Context - -Finish checklist and requirements: - -{context} - ---- - -## Your Task - -{original_prompt} - ---- - -## Workflow - -1. **Review changes** - Run `git diff --name-only` to see all changed files -2. **Verify requirements** - Check each requirement in prd.md is implemented -3. **Spec sync** - Analyze whether changes introduce new patterns, contracts, or conventions - - If new pattern/convention found: read target spec file → update it → update index.md if needed - - If infra/cross-layer change: follow the 7-section mandatory template from update-spec.md - - If pure code fix with no new patterns: skip this step -4. **Run final checks** - Execute lint and typecheck -5. **Confirm ready** - Ensure code is ready for PR - -## Important Constraints - -- You MAY update spec files when gaps are detected (use update-spec.md as guide) -- MUST read the target spec file BEFORE editing (avoid duplicating existing content) -- Do NOT update specs for trivial changes (typos, formatting, obvious fixes) -- If critical CODE issues found, report them clearly (fix specs, not code) -- Verify all acceptance criteria in prd.md are met""" - - -def build_debug_prompt(original_prompt: str, context: str) -> str: - """Build complete prompt for Debug""" - return f"""# Debug Agent Task - -You are the Debug Agent in the Multi-Agent Pipeline (issue fixer). - -## Your Context - -Dev specs and Codex Review results: - -{context} - ---- - -## Your Task - -{original_prompt} - ---- - -## Workflow - -1. **Understand issues** - Analyze issues pointed out in Codex Review -2. **Locate code** - Find positions that need fixing -3. **Fix against specs** - Fix issues following dev specs -4. **Verify fixes** - Run typecheck to ensure no new issues - -## Important Constraints - -- Do NOT execute git commit, only code modifications -- Run typecheck after each fix to verify -- Report which issues were fixed and which files were modified""" - - -def get_research_context(repo_root: str, task_dir: str | None) -> str: - """ - Context for Research Agent - - Research doesn't need much preset context, only needs: - 1. Project structure overview (where spec directories are) - 2. Optional research.jsonl (if there are specific search needs) - """ - context_parts = [] - - # 1. Project structure overview (dynamically discover spec directories) - spec_path = f"{DIR_WORKFLOW}/{DIR_SPEC}" - spec_root = Path(repo_root) / DIR_WORKFLOW / DIR_SPEC - - # Build spec tree dynamically - tree_lines = [f"{spec_path}/"] - if spec_root.is_dir(): - pkg_dirs = sorted(d for d in spec_root.iterdir() if d.is_dir()) - for i, pkg_dir in enumerate(pkg_dirs): - is_last = i == len(pkg_dirs) - 1 - prefix = "└── " if is_last else "├── " - layers = sorted(d.name for d in pkg_dir.iterdir() if d.is_dir()) - layer_info = f" ({', '.join(layers)})" if layers else "" - tree_lines.append(f"{prefix}{pkg_dir.name}/{layer_info}") - - spec_tree = "\n".join(tree_lines) - - project_structure = f"""## Project Spec Directory Structure - -``` -{spec_tree} -``` - -To get structured package info, run: `python3 ./{DIR_WORKFLOW}/scripts/get_context.py --mode packages` - -## Search Tips - -- Spec files: `{spec_path}/**/*.md` -- Code search: Use Glob and Grep tools -- Tech solutions: Use mcp__exa__web_search_exa or mcp__exa__get_code_context_exa""" - - context_parts.append(project_structure) - - # 2. If task directory exists, try reading research.jsonl (optional) - if task_dir: - research_entries = read_jsonl_entries(repo_root, f"{task_dir}/research.jsonl") - if research_entries: - context_parts.append( - "\n## Additional Search Context (from research.jsonl)\n" - ) - for file_path, content in research_entries: - context_parts.append(f"=== {file_path} ===\n{content}") - - return "\n\n".join(context_parts) - - -def build_research_prompt(original_prompt: str, context: str) -> str: - """Build complete prompt for Research""" - return f"""# Research Agent Task - -You are the Research Agent in the Multi-Agent Pipeline (search researcher). - -## Core Principle - -**You do one thing: find and explain information.** - -You are a documenter, not a reviewer. - -## Project Info - -{context} - ---- - -## Your Task - -{original_prompt} - ---- - -## Workflow - -1. **Understand query** - Determine search type (internal/external) and scope -2. **Plan search** - List search steps for complex queries -3. **Execute search** - Execute multiple independent searches in parallel -4. **Organize results** - Output structured report - -## Search Tools - -| Tool | Purpose | -|------|---------| -| Glob | Search by filename pattern | -| Grep | Search by content | -| Read | Read file content | -| mcp__exa__web_search_exa | External web search | -| mcp__exa__get_code_context_exa | External code/doc search | - -## Strict Boundaries - -**Only allowed**: Describe what exists, where it is, how it works - -**Forbidden** (unless explicitly asked): -- Suggest improvements -- Criticize implementation -- Recommend refactoring -- Modify any files - -## Report Format - -Provide structured search results including: -- List of files found (with paths) -- Code pattern analysis (if applicable) -- Related spec documents -- External references (if any)""" - - -def main(): - try: - input_data = json.load(sys.stdin) - except json.JSONDecodeError: - sys.exit(0) - - tool_name = input_data.get("tool_name", "") - - if tool_name not in ("Task", "Agent"): - sys.exit(0) - - tool_input = input_data.get("tool_input", {}) - subagent_type = tool_input.get("subagent_type", "") - original_prompt = tool_input.get("prompt", "") - cwd = input_data.get("cwd", os.getcwd()) - - # Only handle subagent types we care about - if subagent_type not in AGENTS_ALL: - sys.exit(0) - - # Find repo root - repo_root = find_repo_root(cwd) - if not repo_root: - sys.exit(0) - - # Get current task directory (research doesn't require it) - task_dir = get_current_task(repo_root) - - # implement/check/debug need task directory - if subagent_type in AGENTS_REQUIRE_TASK: - if not task_dir: - sys.exit(0) - # Check if task directory exists - task_dir_full = os.path.join(repo_root, task_dir) - if not os.path.exists(task_dir_full): - sys.exit(0) - - # Update current_phase in task.json (system-level enforcement) - update_current_phase(repo_root, task_dir, subagent_type) - - # Check for [finish] marker in prompt (check agent with finish context) - is_finish_phase = "[finish]" in original_prompt.lower() - - # Get context and build prompt based on subagent type - if subagent_type == AGENT_IMPLEMENT: - assert task_dir is not None # validated above - context = get_implement_context(repo_root, task_dir) - new_prompt = build_implement_prompt(original_prompt, context) - elif subagent_type == AGENT_CHECK: - assert task_dir is not None # validated above - if is_finish_phase: - # Finish phase: use finish context (lighter, focused on final verification) - context = get_finish_context(repo_root, task_dir) - new_prompt = build_finish_prompt(original_prompt, context) - else: - # Regular check phase: use check context (full specs for self-fix loop) - context = get_check_context(repo_root, task_dir) - new_prompt = build_check_prompt(original_prompt, context) - elif subagent_type == AGENT_DEBUG: - assert task_dir is not None # validated above - context = get_debug_context(repo_root, task_dir) - new_prompt = build_debug_prompt(original_prompt, context) - elif subagent_type == AGENT_RESEARCH: - # Research can work without task directory - context = get_research_context(repo_root, task_dir) - new_prompt = build_research_prompt(original_prompt, context) - else: - sys.exit(0) - - if not context: - sys.exit(0) - - # Return updated input with correct Claude Code PreToolUse format - output = { - "hookSpecificOutput": { - "hookEventName": "PreToolUse", - "permissionDecision": "allow", - "updatedInput": {**tool_input, "prompt": new_prompt}, - } - } - - print(json.dumps(output, ensure_ascii=False)) - sys.exit(0) - - -if __name__ == "__main__": - main() diff --git a/.claude/hooks/ralph-loop.py b/.claude/hooks/ralph-loop.py deleted file mode 100644 index 3f903610..00000000 --- a/.claude/hooks/ralph-loop.py +++ /dev/null @@ -1,396 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Ralph Loop - SubagentStop Hook for Check Agent Loop Control - -Based on the Ralph Wiggum technique for autonomous agent loops. -Uses completion promises to control when the check agent can stop. - -Mechanism: -- Intercepts when check subagent tries to stop (SubagentStop event) -- If verify commands configured in worktree.yaml, runs them to verify -- Otherwise, reads check.jsonl to get dynamic completion markers ({reason}_FINISH) -- Blocks stopping until verification passes or all markers found -- Has max iterations as safety limit - -State file: .trellis/.ralph-state.json -- Tracks current iteration count per session -- Resets when task changes -""" - -# IMPORTANT: Suppress all warnings FIRST -import warnings -warnings.filterwarnings("ignore") - -import json -import os -import subprocess -import sys -from datetime import datetime -from pathlib import Path - -# IMPORTANT: Force stdout to use UTF-8 on Windows -# This fixes UnicodeEncodeError when outputting non-ASCII characters -if sys.platform == "win32": - import io as _io - if hasattr(sys.stdout, "reconfigure"): - sys.stdout.reconfigure(encoding="utf-8", errors="replace") # type: ignore[union-attr] - elif hasattr(sys.stdout, "detach"): - sys.stdout = _io.TextIOWrapper(sys.stdout.detach(), encoding="utf-8", errors="replace") # type: ignore[union-attr] - -# ============================================================================= -# Configuration -# ============================================================================= - -MAX_ITERATIONS = 5 # Safety limit to prevent infinite loops -STATE_TIMEOUT_MINUTES = 30 # Reset state if older than this -STATE_FILE = ".trellis/.ralph-state.json" -WORKTREE_YAML = ".trellis/worktree.yaml" -DIR_WORKFLOW = ".trellis" -FILE_CURRENT_TASK = ".current-task" - -# Only control loop for check agent -TARGET_AGENT = "check" - - -def find_repo_root(start_path: str) -> str | None: - """Find git repo root from start_path upwards""" - current = Path(start_path).resolve() - while current != current.parent: - if (current / ".git").exists(): - return str(current) - current = current.parent - return None - - -def get_current_task(repo_root: str) -> str | None: - """Read current task directory path""" - current_task_file = os.path.join(repo_root, DIR_WORKFLOW, FILE_CURRENT_TASK) - if not os.path.exists(current_task_file): - return None - - try: - with open(current_task_file, "r", encoding="utf-8") as f: - content = f.read().strip() - if not content: - return None - normalized = content.replace("\\", "/") - while normalized.startswith("./"): - normalized = normalized[2:] - if normalized.startswith("tasks/"): - normalized = f".trellis/{normalized}" - return normalized - except Exception: - return None - - -def get_verify_commands(repo_root: str) -> list[str]: - """ - Read verify commands from worktree.yaml. - - Returns list of commands to run, or empty list if not configured. - Uses simple YAML parsing without external dependencies. - """ - yaml_path = os.path.join(repo_root, WORKTREE_YAML) - if not os.path.exists(yaml_path): - return [] - - try: - with open(yaml_path, "r", encoding="utf-8") as f: - content = f.read() - - # Simple YAML parsing for verify section - # Look for "verify:" followed by list items - lines = content.split("\n") - in_verify_section = False - commands = [] - - for line in lines: - stripped = line.strip() - - # Check for section start - if stripped.startswith("verify:"): - in_verify_section = True - continue - - # Check for new section (not indented, ends with :) - if ( - not line.startswith(" ") - and not line.startswith("\t") - and stripped.endswith(":") - and stripped != "" - ): - in_verify_section = False - continue - - # If in verify section, look for list items - if in_verify_section: - # Skip comments and empty lines - if stripped.startswith("#") or stripped == "": - continue - # Parse list item (- command) - if stripped.startswith("- "): - cmd = stripped[2:].strip() - if cmd: - commands.append(cmd) - - return commands - except Exception: - return [] - - -def run_verify_commands(repo_root: str, commands: list[str]) -> tuple[bool, str]: - """ - Run verify commands and return (success, message). - - All commands must pass for success. - """ - for cmd in commands: - try: - result = subprocess.run( - cmd, - shell=True, - cwd=repo_root, - capture_output=True, - timeout=120, # 2 minute timeout per command - ) - if result.returncode != 0: - stderr = result.stderr.decode("utf-8", errors="replace") - stdout = result.stdout.decode("utf-8", errors="replace") - error_output = stderr or stdout - # Truncate long output - if len(error_output) > 500: - error_output = error_output[:500] + "..." - return False, f"Command failed: {cmd}\n{error_output}" - except subprocess.TimeoutExpired: - return False, f"Command timed out: {cmd}" - except Exception as e: - return False, f"Command error: {cmd} - {str(e)}" - - return True, "All verify commands passed" - - -def get_completion_markers(repo_root: str, task_dir: str) -> list[str]: - """ - Read check.jsonl and generate completion markers from reasons. - - Each entry's "reason" field becomes {REASON}_FINISH marker. - Example: {"file": "...", "reason": "TypeCheck"} -> "TYPECHECK_FINISH" - """ - check_jsonl_path = os.path.join(repo_root, task_dir, "check.jsonl") - markers = [] - - if not os.path.exists(check_jsonl_path): - # Fallback: if no check.jsonl, use default marker - return ["ALL_CHECKS_FINISH"] - - try: - with open(check_jsonl_path, "r", encoding="utf-8") as f: - for line in f: - line = line.strip() - if not line: - continue - try: - item = json.loads(line) - reason = item.get("reason", "") - if reason: - # Convert to uppercase and add _FINISH suffix - marker = f"{reason.upper().replace(' ', '_')}_FINISH" - if marker not in markers: - markers.append(marker) - except json.JSONDecodeError: - continue - except Exception: - pass - - # If no markers found, use default - if not markers: - markers = ["ALL_CHECKS_FINISH"] - - return markers - - -def load_state(repo_root: str) -> dict: - """Load Ralph Loop state from file""" - state_path = os.path.join(repo_root, STATE_FILE) - if not os.path.exists(state_path): - return {"task": None, "iteration": 0, "started_at": None} - - try: - with open(state_path, "r", encoding="utf-8") as f: - return json.load(f) - except Exception: - return {"task": None, "iteration": 0, "started_at": None} - - -def save_state(repo_root: str, state: dict) -> None: - """Save Ralph Loop state to file""" - state_path = os.path.join(repo_root, STATE_FILE) - try: - # Ensure directory exists - os.makedirs(os.path.dirname(state_path), exist_ok=True) - with open(state_path, "w", encoding="utf-8") as f: - json.dump(state, f, indent=2, ensure_ascii=False) - except Exception: - pass - - -def check_completion(agent_output: str, markers: list[str]) -> tuple[bool, list[str]]: - """ - Check if all completion markers are present in agent output. - - Returns: - (all_complete, missing_markers) - """ - missing = [] - for marker in markers: - if marker not in agent_output: - missing.append(marker) - - return len(missing) == 0, missing - - -def main(): - try: - input_data = json.load(sys.stdin) - except json.JSONDecodeError: - # If can't parse input, allow stop - sys.exit(0) - - # Get event info - hook_event = input_data.get("hook_event_name", "") - - # Only handle SubagentStop event - if hook_event != "SubagentStop": - sys.exit(0) - - # Get subagent info - # Field names per Claude Code SubagentStop event schema: - # agent_type, last_assistant_message, agent_id, agent_transcript_path, cwd - # The event does NOT carry a `prompt` field, so finish-phase detection - # based on a `[finish]` marker in the user prompt is no longer possible - # here; finish-phase skip logic should be reintroduced via task.json - # state (e.g. current_phase) in a follow-up. - agent_type = input_data.get("agent_type", "") - last_assistant_message = input_data.get("last_assistant_message", "") - cwd = input_data.get("cwd", os.getcwd()) - - # Only control check agent - if agent_type != TARGET_AGENT: - sys.exit(0) - - # Find repo root - repo_root = find_repo_root(cwd) - if not repo_root: - sys.exit(0) - - # Get current task - task_dir = get_current_task(repo_root) - if not task_dir: - sys.exit(0) - - # Load state - state = load_state(repo_root) - - # Reset state if task changed or state is too old - should_reset = False - if state.get("task") != task_dir: - should_reset = True - elif state.get("started_at"): - try: - started = datetime.fromisoformat(state["started_at"]) - if (datetime.now() - started).total_seconds() > STATE_TIMEOUT_MINUTES * 60: - should_reset = True - except (ValueError, TypeError): - should_reset = True - - if should_reset: - state = { - "task": task_dir, - "iteration": 0, - "started_at": datetime.now().isoformat(), - } - - # Increment iteration - state["iteration"] = state.get("iteration", 0) + 1 - current_iteration = state["iteration"] - - # Save state - save_state(repo_root, state) - - # Safety check: max iterations - if current_iteration >= MAX_ITERATIONS: - # Allow stop, reset state for next run - state["iteration"] = 0 - save_state(repo_root, state) - output = { - "decision": "allow", - "reason": f"Max iterations ({MAX_ITERATIONS}) reached. Stopping to prevent infinite loop.", - } - print(json.dumps(output, ensure_ascii=False)) - sys.exit(0) - - # Check if verify commands are configured - verify_commands = get_verify_commands(repo_root) - - if verify_commands: - # Use programmatic verification - passed, message = run_verify_commands(repo_root, verify_commands) - - if passed: - # All verify commands passed, allow stop - state["iteration"] = 0 - save_state(repo_root, state) - output = { - "decision": "allow", - "reason": "All verify commands passed. Check phase complete.", - } - print(json.dumps(output, ensure_ascii=False)) - sys.exit(0) - else: - # Verification failed, block stop - output = { - "decision": "block", - "reason": f"Iteration {current_iteration}/{MAX_ITERATIONS}. Verification failed:\n{message}\n\nPlease fix the issues and try again.", - } - print(json.dumps(output, ensure_ascii=False)) - sys.exit(0) - else: - # No verify commands, fall back to completion markers - markers = get_completion_markers(repo_root, task_dir) - all_complete, missing = check_completion(last_assistant_message, markers) - - if all_complete: - # All checks complete, allow stop - state["iteration"] = 0 - save_state(repo_root, state) - output = { - "decision": "allow", - "reason": "All completion markers found. Check phase complete.", - } - print(json.dumps(output, ensure_ascii=False)) - sys.exit(0) - else: - # Missing markers, block stop and continue - output = { - "decision": "block", - "reason": f"""Iteration {current_iteration}/{MAX_ITERATIONS}. Missing completion markers: {", ".join(missing)}. - -IMPORTANT: You must ACTUALLY run the checks, not just output the markers. -- Did you run lint? What was the output? -- Did you run typecheck? What was the output? -- Did they actually pass with zero errors? - -Only output a marker (e.g., LINT_FINISH) AFTER: -1. You have executed the corresponding command -2. The command completed with zero errors -3. You have shown the command output in your response - -Do NOT output markers just to escape the loop. The loop exists to ensure quality.""", - } - print(json.dumps(output, ensure_ascii=False)) - sys.exit(0) - - -if __name__ == "__main__": - main() diff --git a/.claude/hooks/session-start.py b/.claude/hooks/session-start.py deleted file mode 100644 index 37e920df..00000000 --- a/.claude/hooks/session-start.py +++ /dev/null @@ -1,414 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Session Start Hook - Inject structured context -""" - -# IMPORTANT: Suppress all warnings FIRST -import warnings -warnings.filterwarnings("ignore") - -import json -import os -import subprocess -import sys -from io import StringIO -from pathlib import Path - -# IMPORTANT: Force stdout to use UTF-8 on Windows -# This fixes UnicodeEncodeError when outputting non-ASCII characters -if sys.platform == "win32": - import io as _io - if hasattr(sys.stdout, "reconfigure"): - sys.stdout.reconfigure(encoding="utf-8", errors="replace") # type: ignore[union-attr] - elif hasattr(sys.stdout, "detach"): - sys.stdout = _io.TextIOWrapper(sys.stdout.detach(), encoding="utf-8", errors="replace") # type: ignore[union-attr] - - -def should_skip_injection() -> bool: - return ( - os.environ.get("CLAUDE_NON_INTERACTIVE") == "1" - or os.environ.get("OPENCODE_NON_INTERACTIVE") == "1" - ) - - -def read_file(path: Path, fallback: str = "") -> str: - try: - return path.read_text(encoding="utf-8") - except (FileNotFoundError, PermissionError): - return fallback - - -def run_script(script_path: Path) -> str: - try: - if script_path.suffix == ".py": - # Add PYTHONIOENCODING to force UTF-8 in subprocess - env = os.environ.copy() - env["PYTHONIOENCODING"] = "utf-8" - cmd = [sys.executable, "-W", "ignore", str(script_path)] - else: - env = os.environ - cmd = [str(script_path)] - - result = subprocess.run( - cmd, - capture_output=True, - text=True, - encoding="utf-8", - errors="replace", - timeout=5, - cwd=script_path.parent.parent.parent, - env=env, - ) - return result.stdout if result.returncode == 0 else "No context available" - except (subprocess.TimeoutExpired, FileNotFoundError, PermissionError): - return "No context available" - - -def _normalize_task_ref(task_ref: str) -> str: - normalized = task_ref.strip() - if not normalized: - return "" - - path_obj = Path(normalized) - if path_obj.is_absolute(): - return str(path_obj) - - normalized = normalized.replace("\\", "/") - while normalized.startswith("./"): - normalized = normalized[2:] - - if normalized.startswith("tasks/"): - return f".trellis/{normalized}" - - return normalized - - -def _resolve_task_dir(trellis_dir: Path, task_ref: str) -> Path: - normalized = _normalize_task_ref(task_ref) - path_obj = Path(normalized) - if path_obj.is_absolute(): - return path_obj - if normalized.startswith(".trellis/"): - return trellis_dir.parent / path_obj - return trellis_dir / "tasks" / path_obj - - -def _get_task_status(trellis_dir: Path) -> str: - """Check current task status and return structured status string.""" - current_task_file = trellis_dir / ".current-task" - if not current_task_file.is_file(): - return "Status: NO ACTIVE TASK\nNext: Describe what you want to work on" - - task_ref = _normalize_task_ref(current_task_file.read_text(encoding="utf-8").strip()) - if not task_ref: - return "Status: NO ACTIVE TASK\nNext: Describe what you want to work on" - - # Resolve task directory - task_dir = _resolve_task_dir(trellis_dir, task_ref) - if not task_dir.is_dir(): - return f"Status: STALE POINTER\nTask: {task_ref}\nNext: Task directory not found. Run: python3 ./.trellis/scripts/task.py finish" - - # Read task.json - task_json_path = task_dir / "task.json" - task_data = {} - if task_json_path.is_file(): - try: - task_data = json.loads(task_json_path.read_text(encoding="utf-8")) - except (json.JSONDecodeError, PermissionError): - pass - - task_title = task_data.get("title", task_ref) - task_status = task_data.get("status", "unknown") - - if task_status == "completed": - return f"Status: COMPLETED\nTask: {task_title}\nNext: Archive with `python3 ./.trellis/scripts/task.py archive {task_dir.name}` or start a new task" - - # Check if context is configured (jsonl files exist and non-empty) - has_context = False - for jsonl_name in ("implement.jsonl", "check.jsonl", "spec.jsonl"): - jsonl_path = task_dir / jsonl_name - if jsonl_path.is_file() and jsonl_path.stat().st_size > 0: - has_context = True - break - - has_prd = (task_dir / "prd.md").is_file() - - if not has_prd: - return f"Status: NOT READY\nTask: {task_title}\nMissing: prd.md not created\nNext: Write PRD, then research → init-context → start" - - if not has_context: - return f"Status: NOT READY\nTask: {task_title}\nMissing: Context not configured (no jsonl files)\nNext: Complete Phase 2 (research → init-context → start) before implementing" - - return f"Status: READY\nTask: {task_title}\nNext: Continue with implement or check" - - -def _load_trellis_config(trellis_dir: Path) -> tuple: - """Load Trellis config for session-start decisions. - - Returns: - (is_mono, packages_dict, spec_scope, task_pkg, default_pkg) - """ - scripts_dir = trellis_dir / "scripts" - if str(scripts_dir) not in sys.path: - sys.path.insert(0, str(scripts_dir)) - - try: - from common.config import get_default_package, get_packages, get_spec_scope, is_monorepo # type: ignore[import-not-found] - from common.paths import get_current_task # type: ignore[import-not-found] - - repo_root = trellis_dir.parent - is_mono = is_monorepo(repo_root) - packages = get_packages(repo_root) or {} - scope = get_spec_scope(repo_root) - - # Get active task's package - task_pkg = None - current = get_current_task(repo_root) - if current: - task_json = repo_root / current / "task.json" - if task_json.is_file(): - try: - data = json.loads(task_json.read_text(encoding="utf-8")) - if isinstance(data, dict): - tp = data.get("package") - if isinstance(tp, str) and tp: - task_pkg = tp - except (json.JSONDecodeError, OSError): - pass - - default_pkg = get_default_package(repo_root) - return is_mono, packages, scope, task_pkg, default_pkg - except Exception: - return False, {}, None, None, None - - -def _check_legacy_spec(trellis_dir: Path, is_mono: bool, packages: dict) -> str | None: - """Check for legacy spec directory structure in monorepo. - - Returns warning message if legacy structure detected, None otherwise. - """ - if not is_mono or not packages: - return None - - spec_dir = trellis_dir / "spec" - if not spec_dir.is_dir(): - return None - - # Check for legacy flat spec dirs (spec/backend/, spec/frontend/ with index.md) - has_legacy = False - for legacy_name in ("backend", "frontend"): - legacy_dir = spec_dir / legacy_name - if legacy_dir.is_dir() and (legacy_dir / "index.md").is_file(): - has_legacy = True - break - - if not has_legacy: - return None - - # Check which packages are missing spec/<pkg>/ directory - missing = [ - name for name in sorted(packages.keys()) - if not (spec_dir / name).is_dir() - ] - - if not missing: - return None # All packages have spec dirs - - if len(missing) == len(packages): - return ( - f"[!] Legacy spec structure detected: found `spec/backend/` or `spec/frontend/` " - f"but no package-scoped `spec/<package>/` directories.\n" - f"Monorepo packages: {', '.join(sorted(packages.keys()))}\n" - f"Please reorganize: `spec/backend/` -> `spec/<package>/backend/`" - ) - return ( - f"[!] Partial spec migration detected: packages {', '.join(missing)} " - f"still missing `spec/<pkg>/` directory.\n" - f"Please complete migration for all packages." - ) - - -def _resolve_spec_scope( - is_mono: bool, - packages: dict, - scope, - task_pkg: str | None, - default_pkg: str | None, -) -> set | None: - """Resolve which packages should have their specs injected. - - Returns: - Set of package names to include, or None for full scan. - """ - if not is_mono or not packages: - return None # Single-repo: full scan - - if scope is None: - return None # No scope configured: full scan - - if isinstance(scope, str) and scope == "active_task": - if task_pkg and task_pkg in packages: - return {task_pkg} - if default_pkg and default_pkg in packages: - return {default_pkg} - return None # Fallback to full scan - - if isinstance(scope, list): - valid = set() - for entry in scope: - if entry in packages: - valid.add(entry) - else: - print( - f"Warning: spec_scope contains unknown package: {entry}, ignoring", - file=sys.stderr, - ) - - if valid: - # Warn if active task is out of scope - if task_pkg and task_pkg not in valid: - print( - f"Warning: active task package '{task_pkg}' is out of configured spec_scope", - file=sys.stderr, - ) - return valid - - # All entries invalid: fallback chain - print( - "Warning: all spec_scope entries invalid, falling back to task/default/full", - file=sys.stderr, - ) - if task_pkg and task_pkg in packages: - return {task_pkg} - if default_pkg and default_pkg in packages: - return {default_pkg} - return None # Full scan - - return None # Unknown scope type: full scan - - -def _build_workflow_toc(workflow_path: Path) -> str: - """Build a compact section index for workflow.md (lazy-load the full file on demand). - - Replaces full-file injection to keep additionalContext payload small. - The full file is accessible via: Read tool on .trellis/workflow.md - """ - content = read_file(workflow_path) - if not content: - return "No workflow.md found" - - toc_lines = [ - "# Development Workflow — Section Index", - "Full guide: .trellis/workflow.md (read on demand)", - "", - ] - for line in content.splitlines(): - if line.startswith("## "): - toc_lines.append(line) - - toc_lines += [ - "", - "To read a section: use the Read tool on .trellis/workflow.md", - ] - return "\n".join(toc_lines) - - -def main(): - if should_skip_injection(): - sys.exit(0) - - project_dir = Path(os.environ.get("CLAUDE_PROJECT_DIR", ".")).resolve() - trellis_dir = project_dir / ".trellis" - - # Load config for scope filtering and legacy detection - is_mono, packages, scope_config, task_pkg, default_pkg = _load_trellis_config(trellis_dir) - allowed_pkgs = _resolve_spec_scope(is_mono, packages, scope_config, task_pkg, default_pkg) - - output = StringIO() - - output.write("""<session-context> -You are starting a new session in a Trellis-managed project. -Read and follow all instructions below carefully. -</session-context> - -""") - - # Legacy migration warning - legacy_warning = _check_legacy_spec(trellis_dir, is_mono, packages) - if legacy_warning: - output.write(f"<migration-warning>\n{legacy_warning}\n</migration-warning>\n\n") - - output.write("<current-state>\n") - context_script = trellis_dir / "scripts" / "get_context.py" - output.write(run_script(context_script)) - output.write("\n</current-state>\n\n") - - output.write("<workflow>\n") - output.write(_build_workflow_toc(trellis_dir / "workflow.md")) - output.write("\n</workflow>\n\n") - - output.write("<guidelines>\n") - output.write("**Note**: The guidelines below are index files — they list available guideline documents and their locations.\n") - output.write("During actual development, you MUST read the specific guideline files listed in each index's Pre-Development Checklist.\n\n") - - spec_dir = trellis_dir / "spec" - if spec_dir.is_dir(): - for sub in sorted(spec_dir.iterdir()): - if not sub.is_dir() or sub.name.startswith("."): - continue - - # Always include guides/ regardless of scope - if sub.name == "guides": - index_file = sub / "index.md" - if index_file.is_file(): - output.write(f"## {sub.name}\n") - output.write(read_file(index_file)) - output.write("\n\n") - continue - - index_file = sub / "index.md" - if index_file.is_file(): - # Flat spec dir (single-repo layer like spec/backend/) - output.write(f"## {sub.name}\n") - output.write(read_file(index_file)) - output.write("\n\n") - else: - # Nested package dirs (monorepo: spec/<pkg>/<layer>/index.md) - # Apply scope filter - if allowed_pkgs is not None and sub.name not in allowed_pkgs: - continue - for nested in sorted(sub.iterdir()): - if not nested.is_dir(): - continue - nested_index = nested / "index.md" - if nested_index.is_file(): - output.write(f"## {sub.name}/{nested.name}\n") - output.write(read_file(nested_index)) - output.write("\n\n") - - output.write("</guidelines>\n\n") - - # Check task status and inject structured tag - task_status = _get_task_status(trellis_dir) - output.write(f"<task-status>\n{task_status}\n</task-status>\n\n") - - output.write("""<ready> -Context loaded. Workflow index, project state, and guidelines are already injected above — do NOT re-read them. -Wait for the user's first message, then handle it following the workflow guide. -If there is an active task, ask whether to continue it. -</ready>""") - - result = { - "hookSpecificOutput": { - "hookEventName": "SessionStart", - "additionalContext": output.getvalue(), - } - } - - # Output JSON - stdout is already configured for UTF-8 - print(json.dumps(result, ensure_ascii=False), flush=True) - - -if __name__ == "__main__": - main() diff --git a/.claude/hooks/statusline.py b/.claude/hooks/statusline.py deleted file mode 100644 index a91ef1ce..00000000 --- a/.claude/hooks/statusline.py +++ /dev/null @@ -1,218 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Trellis StatusLine — project-level status display for Claude Code. - -Reads Claude Code session JSON from stdin + Trellis task data from filesystem. -Outputs 1-2 lines: - With active task: [P1] Task title (status) + info line - Without task: info line only -Info line: model · ctx% · branch · duration · developer · tasks · rate limits -""" -from __future__ import annotations - -import io -import json -import re -import subprocess -import sys -from pathlib import Path - -# Fix: Windows Python defaults to GBK encoding, which corrupts UTF-8 -# characters like the middle dot (·). Wrap stdout/stderr with UTF-8. -if sys.platform == "win32": - sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding="utf-8") - sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding="utf-8") - - -def _read_text(path: Path) -> str: - try: - return path.read_text(encoding="utf-8").strip() - except (FileNotFoundError, PermissionError, OSError): - return "" - - -def _read_json(path: Path) -> dict: - text = _read_text(path) - if not text: - return {} - try: - return json.loads(text) - except (json.JSONDecodeError, ValueError): - return {} - - -def _normalize_task_ref(task_ref: str) -> str: - normalized = task_ref.strip() - if not normalized: - return "" - - path_obj = Path(normalized) - if path_obj.is_absolute(): - return str(path_obj) - - normalized = normalized.replace("\\", "/") - while normalized.startswith("./"): - normalized = normalized[2:] - - if normalized.startswith("tasks/"): - return f".trellis/{normalized}" - - return normalized - - -def _resolve_task_dir(trellis_dir: Path, task_ref: str) -> Path: - normalized = _normalize_task_ref(task_ref) - path_obj = Path(normalized) - if path_obj.is_absolute(): - return path_obj - if normalized.startswith(".trellis/"): - return trellis_dir.parent / path_obj - return trellis_dir / "tasks" / path_obj - - -def _find_trellis_dir() -> Path | None: - """Walk up from cwd to find .trellis/ directory.""" - current = Path.cwd() - for parent in [current, *current.parents]: - candidate = parent / ".trellis" - if candidate.is_dir(): - return candidate - return None - - -def _get_current_task(trellis_dir: Path) -> dict | None: - """Load current task info. Returns dict with title/status/priority or None.""" - task_ref = _normalize_task_ref(_read_text(trellis_dir / ".current-task")) - if not task_ref: - return None - - # Resolve task directory - task_path = _resolve_task_dir(trellis_dir, task_ref) - task_data = _read_json(task_path / "task.json") - if not task_data: - return None - - return { - "title": task_data.get("title") or task_data.get("name") or "unknown", - "status": task_data.get("status", "unknown"), - "priority": task_data.get("priority", "P2"), - } - - -def _count_active_tasks(trellis_dir: Path) -> int: - """Count non-archived task directories with valid task.json.""" - tasks_dir = trellis_dir / "tasks" - if not tasks_dir.is_dir(): - return 0 - count = 0 - for d in tasks_dir.iterdir(): - if d.is_dir() and d.name != "archive" and (d / "task.json").is_file(): - count += 1 - return count - - -def _get_developer(trellis_dir: Path) -> str: - content = _read_text(trellis_dir / ".developer") - if not content: - return "unknown" - for line in content.splitlines(): - if line.startswith("name="): - return line[5:].strip() - return content.splitlines()[0].strip() or "unknown" - - -def _get_git_branch() -> str: - try: - result = subprocess.run( - ["git", "branch", "--show-current"], - capture_output=True, text=True, timeout=3, - ) - return result.stdout.strip() if result.returncode == 0 else "" - except (FileNotFoundError, subprocess.TimeoutExpired): - return "" - - -def _format_ctx_size(size: int) -> str: - if size >= 1_000_000: - return f"{size // 1_000_000}M" - if size >= 1_000: - return f"{size // 1_000}K" - return str(size) - - -def _format_duration(ms: int) -> str: - secs = ms // 1000 - hours, remainder = divmod(secs, 3600) - mins = remainder // 60 - if hours > 0: - return f"{hours}h{mins}m" - return f"{mins}m" - - -def main() -> None: - # Read Claude Code session JSON from stdin - try: - cc_data = json.loads(sys.stdin.read()) - except (json.JSONDecodeError, ValueError): - cc_data = {} - - trellis_dir = _find_trellis_dir() - SEP = " \033[90m·\033[0m " - - # --- Trellis data --- - task = _get_current_task(trellis_dir) if trellis_dir else None - dev = _get_developer(trellis_dir) if trellis_dir else "" - task_count = _count_active_tasks(trellis_dir) if trellis_dir else 0 - - # --- CC session data --- - model = cc_data.get("model", {}).get("display_name", "?") - ctx_pct = int(cc_data.get("context_window", {}).get("used_percentage") or 0) - ctx_size = _format_ctx_size(cc_data.get("context_window", {}).get("context_window_size") or 0) - duration = _format_duration(cc_data.get("cost", {}).get("total_duration_ms") or 0) - branch = _get_git_branch() - - # Avoid "Opus 4.6 (1M context) (1M)" - if re.search(r"\d+[KMG]\b", model, re.IGNORECASE): - model_label = model - else: - model_label = f"{model} ({ctx_size})" - - # Context % with color - if ctx_pct >= 90: - ctx_color = "\033[31m" - elif ctx_pct >= 70: - ctx_color = "\033[33m" - else: - ctx_color = "\033[32m" - - # Build info line: model · ctx · branch · duration · dev · tasks [· rate limits] - parts = [ - model_label, - f"ctx {ctx_color}{ctx_pct}%\033[0m", - ] - if branch: - parts.append(f"\033[35m{branch}\033[0m") - parts.append(duration) - if dev: - parts.append(f"\033[32m{dev}\033[0m") - if task_count: - parts.append(f"{task_count} task(s)") - - five_hr = cc_data.get("rate_limits", {}).get("five_hour", {}).get("used_percentage") - if five_hr is not None: - parts.append(f"5h {int(five_hr)}%") - seven_day = cc_data.get("rate_limits", {}).get("seven_day", {}).get("used_percentage") - if seven_day is not None: - parts.append(f"7d {int(seven_day)}%") - - info_line = SEP.join(parts) - - # Output: task line (only if active) + info line - if task: - print(f"\033[36m[{task['priority']}]\033[0m {task['title']} \033[33m({task['status']})\033[0m") - print(info_line) - - -if __name__ == "__main__": - main() diff --git a/.claude/settings.json b/.claude/settings.json deleted file mode 100644 index 1e1f9904..00000000 --- a/.claude/settings.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "statusLine": { - "type": "command", - "command": "python3 .claude/hooks/statusline.py" - }, - "hooks": { - "SessionStart": [ - { - "matcher": "startup", - "hooks": [ - { - "type": "command", - "command": "python3 .claude/hooks/session-start.py", - "timeout": 10 - } - ] - }, - { - "matcher": "clear", - "hooks": [ - { - "type": "command", - "command": "python3 .claude/hooks/session-start.py", - "timeout": 10 - } - ] - }, - { - "matcher": "compact", - "hooks": [ - { - "type": "command", - "command": "python3 .claude/hooks/session-start.py", - "timeout": 10 - } - ] - } - ], - "PreToolUse": [ - { - "matcher": "Task", - "hooks": [ - { - "type": "command", - "command": "python3 .claude/hooks/inject-subagent-context.py", - "timeout": 30 - } - ] - }, - { - "matcher": "Agent", - "hooks": [ - { - "type": "command", - "command": "python3 .claude/hooks/inject-subagent-context.py", - "timeout": 30 - } - ] - } - ], - "SubagentStop": [ - { - "matcher": "check", - "hooks": [ - { - "type": "command", - "command": "python3 .claude/hooks/ralph-loop.py", - "timeout": 10 - } - ] - } - ] - }, - "enabledPlugins": {} -} diff --git a/.gitignore b/.gitignore index eb4024b9..92e8eff2 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ bin-release/ /.idea /.codex-tasks /.trellis +/.claude diff --git a/.trellis/.gitignore b/.trellis/.gitignore deleted file mode 100644 index 46135ba0..00000000 --- a/.trellis/.gitignore +++ /dev/null @@ -1,29 +0,0 @@ -# Developer identity (local only) -.developer - -# Current task pointer (each dev works on different task) -.current-task - -# Ralph Loop state file -.ralph-state.json - -# Agent runtime files -.agents/ -.agent-log -.session-id - -# Task directory runtime files -.plan-log - -# Atomic update temp files -*.tmp - -# Update backup directories -.backup-* - -# Conflict resolution temp files -*.new - -# Python cache -**/__pycache__/ -**/*.pyc diff --git a/.trellis/.template-hashes.json b/.trellis/.template-hashes.json deleted file mode 100644 index 92c63283..00000000 --- a/.trellis/.template-hashes.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - ".trellis/config.yaml": "cb5216826e1091bfa0d4ebae257d6f43fa60ca2bafbf3d9a6489b2c1a51a99df", - ".trellis/scripts/__init__.py": "1242be5b972094c2e141aecbe81a4efd478f6534e3d5e28306374e6a18fcf46c", - ".trellis/scripts/add_session.py": "a97a6c88ff7def8045a5dffa5c698a823392d7f73c1641e8a0c08db0168bd913", - ".trellis/scripts/common/__init__.py": "a8afa14ebe662723f96e4f5757c15359d76adf4cb5c52327c94dbe854bd1ab01", - ".trellis/scripts/common/cli_adapter.py": "d9bc50508918c5a2e17ce48384de5e1d9f7c2e32b0d57019d1bec973728d445f", - ".trellis/scripts/common/config.py": "1244bccc9d3e1e1c304f914ea913f2f4a0b6d54571e6845633d586c2139a07bf", - ".trellis/scripts/common/developer.py": "f5f833123abe68890171b4da825a324216d24913f6b5ad9245afc556424ffd7b", - ".trellis/scripts/common/git.py": "e14817be7de122d3a106f509c2825aeb9669d962ba73ba241642d2931cfdf1d6", - ".trellis/scripts/common/git_context.py": "5a01f7209c4a85ec768c88e2cb2a02a40ff279ea26139a390d16bf7576efce9f", - ".trellis/scripts/common/io.py": "6480b181f2bc505323b28ed7a66963d7b7edc96251e83b4c8e7a45907cc721c8", - ".trellis/scripts/common/log.py": "471df6895cfac80f995edebbf9974f6b7440634b7a688f28b8331c868bc0f3cf", - ".trellis/scripts/common/packages_context.py": "efe158d7c99c2268851d0216fbb08de22836e418a8dbeb73575b8cc249eed7b7", - ".trellis/scripts/common/paths.py": "36f72bdc09e4f0db53250346a4744ff3699c634ea71380eed5b467095f3d946b", - ".trellis/scripts/common/phase.py": "412b7096ef0e48b8a95a79060121a586e0d9d44f1b350d6ed818c6f84330bb01", - ".trellis/scripts/common/registry.py": "e1f4480ec264734eb4ef6867edc42fce2e2535045e5cff835fb81e0443d673e6", - ".trellis/scripts/common/session_context.py": "2389eff1a66b172783fcb714a79385114d9b29746133a3e0db732c3b5cb23898", - ".trellis/scripts/common/task_context.py": "8aad7107a7f86e7ddc381a7358364a6176c61d619ee2094cb698c24a0d5ab214", - ".trellis/scripts/common/task_queue.py": "0be61f713462b1fe4574927c82fc4704e678afe72dcb9813543aedf2f9e9e0c5", - ".trellis/scripts/common/task_store.py": "79e6257a0bedfd854fbfb5bdb3898a81181bcd700bc03ae3a970a032f7793610", - ".trellis/scripts/common/task_utils.py": "f5ef4af87ba3e11d8b19630c0c96d009de1811fc9be56c2027a9c96e21ed103e", - ".trellis/scripts/common/tasks.py": "eeefae693dadec54c8945394e288e90ed1e8f79545dfb2d4934a431496f5229d", - ".trellis/scripts/common/types.py": "d623ada858d3cb55093c5c95c9ce182b99b5865b7441742297542fad3b21cc06", - ".trellis/scripts/common/worktree.py": "434880e02dfa2e92f0c717ed2a28e4cdee681ea10c329a2438d533bdbc612408", - ".trellis/scripts/create_bootstrap.py": "33b40df671ba7828fd8d3ba8c019823a8b03e938797b1cae218c55d6c7ebe57a", - ".trellis/scripts/get_context.py": "ca5bf9e90bdb1d75d3de182b95f820f9d108ab28793d29097b24fd71315adcf5", - ".trellis/scripts/get_developer.py": "84c27076323c3e0f2c9c8ed16e8aa865e225d902a187c37e20ee1a46e7142d8f", - ".trellis/scripts/hooks/linear_sync.py": "e09cc4ce4699aada908808718698f33f705a3edf55c4dcf8f777ad892f80ca79", - ".trellis/scripts/init_developer.py": "f9e6c0d882406e81c8cd6b1c5abb204b0befc0069ff89cf650cd536a80f8c60e", - ".trellis/scripts/multi_agent/__init__.py": "af6fceb4d9a64da04be03ba0f5a6daf71066503eca832b8b58d8a7d4b2844fa4", - ".trellis/scripts/multi_agent/_bootstrap.py": "4d0c06e41ba17e33172974783719731551607400de0c751c13414fed9d0c8c30", - ".trellis/scripts/multi_agent/cleanup.py": "046ad29aa533e41d8952bf02c2dcfcdab2755002222d92455d194ef97a6e82e2", - ".trellis/scripts/multi_agent/create_pr.py": "03018c0c50a45758c28da5751afea1822be0acffe9053587cdf9d514a83ae27e", - ".trellis/scripts/multi_agent/plan.py": "011481ad0024a91f6a9e16535c6f5c4c7ba8eb311c46428104f1aeea7fc934e7", - ".trellis/scripts/multi_agent/start.py": "01e7f81fac53078a24a9fda50dc3000c2cee49179e05b8f7284747eebec1a543", - ".trellis/scripts/multi_agent/status.py": "06b3d2c5a9f7bea884962ace3b25113a3b01bf50dc12ad2f473e4f0c914fff7e", - ".trellis/scripts/multi_agent/status_display.py": "d432446644b07dcbea7fd3aeba1d31ae42a9c664e91eebbdab503fbb698bccac", - ".trellis/scripts/multi_agent/status_monitor.py": "11ba35180a568aa4d14ccaee81cc213ff3d5ab83025f264ac57ca70385f11f4c", - ".trellis/scripts/task.py": "77cd33a8c58803cd7dbe64bb9c045d6c93c1fa1453bed1e286d6f62bc329607e", - ".trellis/workflow.md": "892242e83f53194f49f7326ed9b50a7fc72ff810cd316c4d03ea8e7f11f5bbbd", - ".trellis/worktree.yaml": "c57de79e40d5f748f099625ed4a17d5f0afbf25cac598aced0b3c964e7b7c226", - ".claude/agents/check.md": "7c7400e7ea8bf3f3f879bfa028fd5b4d41673e0150d44c52292161ba33612812", - ".claude/agents/debug.md": "94be0b1cfbae4c64caee4775ef504f43acfcd4a80427a26d6f680ceaddcbee24", - ".claude/agents/dispatch.md": "90446e5b2bce1bc416856eb728361e21452ada9fb1cd05b1b29cd1a660f34c38", - ".claude/agents/implement.md": "f506be6291311a9846104e55c46659746027c70e841cb04dda89b4069ad6722d", - ".claude/agents/plan.md": "d796f689b8b8945d1809679d0c74475f419325b30f36ef0c59b7fae73386e90b", - ".claude/agents/research.md": "086ae23120151b3591089a4de20fd54e6ae2b89038f5903ee9a52269cd7ded6a", - ".claude/commands/trellis/before-dev.md": "dd926596f3139c12d42469fb5147ac90724e3a7baca5591384f4f4bbdd530b54", - ".claude/commands/trellis/brainstorm.md": "7c7731eda092275a5d87f2569a69584f3c39b544a126a76e727a1e9d250c4a65", - ".claude/commands/trellis/break-loop.md": "ba4dd4022dde1e4bbcfc1cc99e6a118e51b9db95bd962d88f1c29d0c9c433112", - ".claude/commands/trellis/check-cross-layer.md": "b9ab24515ead84330d6634f6ad912ca3547db3a36139d62c5688161824097d60", - ".claude/commands/trellis/check.md": "8b0d20b425b6030d13ac5aa0c876c5ec97cf7aca9b050f574f07f281ad25bd06", - ".claude/commands/trellis/create-command.md": "9faa6e68e28ecaa4077dc651eee2a656ef4f4d090da865c891b4b07194a53b90", - ".claude/commands/trellis/finish-work.md": "cc92cad9e94ce1cc4f29e3de16a640db7e9176e3ecfc9c19a566153671ca2168", - ".claude/commands/trellis/integrate-skill.md": "3940442485341832257c595ddfb45582e2d60e5a4716f2bd15b7bce0498b130a", - ".claude/commands/trellis/onboard.md": "cf9591fcddc412ff80772bf441c8d94d7724e6713fdf38a04a3348ab8949e64e", - ".claude/commands/trellis/parallel.md": "d2b76e732e625d3d843f97bed96ab5c4b2308aad4b64a93fa1f85553f567e256", - ".claude/commands/trellis/record-session.md": "33b5626fcf03a57578f46133b2a14c6bbe19c4ef29652af3f828f24f448f5926", - ".claude/commands/trellis/start.md": "34ecead84912a4338575f8648a9d449f89dfb4d4725416c889dac03586f98800", - ".claude/commands/trellis/update-spec.md": "ff4d5a0405a763e61936f5b9df175fd25ea20ec5c20fa999855020ab78a919b6", - ".claude/hooks/inject-subagent-context.py": "581f61369c29534513e5505e61f507beac339cb1720dc656b58f0584503b2452", - ".claude/hooks/ralph-loop.py": "df864b971ea5faf5801a88f013f230c92d458f52f64731a91f02cd78d7b932c3", - ".claude/hooks/session-start.py": "dfa553082095b75f2d714be42fbf46f651235df63caba9eb50d7b84306d486e3", - ".claude/hooks/statusline.py": "c92c0020a0c60308437b66f024a244303e708519c97089cf654ceddc144f7435", - ".claude/settings.json": "f468342f1ebfef18dbbde0a2528366b32ec154befca880e0c8b29fefdcccb1bf", - ".cursor/commands/trellis-before-dev.md": "dd926596f3139c12d42469fb5147ac90724e3a7baca5591384f4f4bbdd530b54", - ".cursor/commands/trellis-brainstorm.md": "cd0cc2f346b16b289ebcd7a35c402db53fb8c7c9653a5679ad3dc065c200e300", - ".cursor/commands/trellis-break-loop.md": "24d07ac0ac1873cb7adf5228c597e58a58125d80fc1e8d2eb5d6948c43761566", - ".cursor/commands/trellis-check-cross-layer.md": "a79fe38f29f84a4524a70987e9fecfca569430df476082bff9dde31596ca3951", - ".cursor/commands/trellis-check.md": "8b0d20b425b6030d13ac5aa0c876c5ec97cf7aca9b050f574f07f281ad25bd06", - ".cursor/commands/trellis-create-command.md": "6147b410be59a00b886162ee0785f4bb020998ef8f9fa2bbc68ed5deea20f36c", - ".cursor/commands/trellis-finish-work.md": "582e968ada1b2b6124baf19a0e89ba1e5617330f4a1318e8d3334698e40fce67", - ".cursor/commands/trellis-integrate-skill.md": "bb15144c308939abfd41cb008da71088910b6ec432c763ab4c0762dd6f0819e8", - ".cursor/commands/trellis-onboard.md": "420fe6681008e36017e77d1ebcd5db8cba8b966ddc53363aea942b9fefb21892", - ".cursor/commands/trellis-record-session.md": "33b5626fcf03a57578f46133b2a14c6bbe19c4ef29652af3f828f24f448f5926", - ".cursor/commands/trellis-start.md": "f03c7c1fde78c60ac8604938f1af7b2b54ef3cb4caf200d88edbbc8fc8d58c8f", - ".cursor/commands/trellis-update-spec.md": "714ce498567304c679d4b541e13cc670ce1cfc34c2abeb6d7e7d0f7196a52eff", - ".cursor/skills/ui-ux-pro-max/SKILL.md": "6cec1c00e1d890a41a2a600814bc765b6e264d9800742a1e3dff0441da9016c8", - ".cursor/skills/ui-ux-pro-max/data/charts.csv": "77d32cf4d9e78f80795baf391e1cc8f9ee137351aab29ca682938ec9d8ebe7e4", - ".cursor/skills/ui-ux-pro-max/data/colors.csv": "19a74a1fe858f92dc9213553bb6b8326b7f32dc6bfc0857668e2b4da32322f8a", - ".cursor/skills/ui-ux-pro-max/data/icons.csv": "351fe61ba45b8146c66de6ea7d67297654639d79a94f537b4d0bad570058c28f", - ".cursor/skills/ui-ux-pro-max/data/landing.csv": "51021dbadc40b0305c42f80c270eb515420440afe9f3482dfd048dc2475dbfbd", - ".cursor/skills/ui-ux-pro-max/data/products.csv": "6f9c9be6fdb53a415af273dac6221e87a418d1600da2ee39f974b997e880050e", - ".cursor/skills/ui-ux-pro-max/data/react-performance.csv": "904c8afcda229629545912dde0e8ac37503757131f0169f80b016f1f58c4fd3f", - ".cursor/skills/ui-ux-pro-max/data/stacks/astro.csv": "ad18dae3ab6d148d37d144592df80dc1825b6c9e86d9d2d68fdda77434206a37", - ".cursor/skills/ui-ux-pro-max/data/stacks/flutter.csv": "fe36d404c799781e8ba6e9a8179b45799ed5126a545528550cd2eb0f2346e8c5", - ".cursor/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv": "7aef38e75c53559470afcfa91580a9917ca8b7dbf8b92110389e23e93703ac52", - ".cursor/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv": "6c8fd4b0391c342c12b0af15610cd5becbeccaef0bbe8dcfc01d928c3195d93e", - ".cursor/skills/ui-ux-pro-max/data/stacks/nextjs.csv": "e828ccc04843742f52f545a068e8a9ab0d2b97c0e771f7e93bf0cef74da05554", - ".cursor/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv": "05d6e74501b2b6a636faed32450622759f49a5bcafad971f5f4e7eba0eb7be71", - ".cursor/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv": "f7a3f2d9542856d00199f85c6c023b7c284cc698e2e6e12d61afce2edacb24d6", - ".cursor/skills/ui-ux-pro-max/data/stacks/react-native.csv": "077aefc81d194895ecf7936b3ed298b978e36961f183e3a275f8acda19b5f621", - ".cursor/skills/ui-ux-pro-max/data/stacks/react.csv": "e5624ab41d33427d88e41d07581ce4eca59b37b36ab72a6ad43a9c8e2d0a1c72", - ".cursor/skills/ui-ux-pro-max/data/stacks/shadcn.csv": "395c2e415ef6f48a474acccdc8eb2c7258a6ed751a5037ba171a2d8823e02ded", - ".cursor/skills/ui-ux-pro-max/data/stacks/svelte.csv": "71af52d64f266c88070b91dbbaa900c2f8074b6baae9f35eaea6ba9cec6fd803", - ".cursor/skills/ui-ux-pro-max/data/stacks/swiftui.csv": "c9c2d2510f8e66281a2514e8dd0125a6b653b9ef53a71281b5e7dfe003d5b569", - ".cursor/skills/ui-ux-pro-max/data/stacks/vue.csv": "c2724915d3c11cd67263f25896cff721f787a0fdd8326002d31e9f5806dfd8f8", - ".cursor/skills/ui-ux-pro-max/data/styles.csv": "663ac9775e6f5b874b32d930fa0951591c45e39cde8ac7033278f42a0881c037", - ".cursor/skills/ui-ux-pro-max/data/typography.csv": "64695e05ac335ba534aff396c4ba9241c642f80ea53b424251d2669b71c4772b", - ".cursor/skills/ui-ux-pro-max/data/ui-reasoning.csv": "58fc52fff69f62709f8c7dd460de6f6693699ea820f24287f3301a427c2b554e", - ".cursor/skills/ui-ux-pro-max/data/ux-guidelines.csv": "e01943c433b2cad3040f19389b3b0455673758a569b7a927b5bedf65c989cb96", - ".cursor/skills/ui-ux-pro-max/data/web-interface.csv": "10bfc24e09a6a15db8309e6ef9b6881e1d4af97dffb7c99418aefb8e30df7d54", - ".cursor/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-314.pyc": "dd1b4c8c8160ef7a62527c315f9a01dfa7a40e1548c0369f4be7225dfd21f327", - ".cursor/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-314.pyc": "6f4beb2252825300dbebb31dab4d670c40c2595e2e201885b37ce30736664893", - ".cursor/skills/ui-ux-pro-max/scripts/__pycache__/search.cpython-314.pyc": "90787c012e77c120fc62b3a0e739c454af6d2245831c65cb80e15b4a8d4c1ac7", - ".cursor/skills/ui-ux-pro-max/scripts/core.py": "5459d1f04eea03dfb913742d0c03edc5065ac67f6227e4807fa87699662588cb", - ".cursor/skills/ui-ux-pro-max/scripts/design_system.py": "4da1d341f3c7749df51b51db4a543a48a427c3c746eb0e9882a1ab86acf3bb54", - ".cursor/skills/ui-ux-pro-max/scripts/search.py": "e924de555714fe612398d36f30c1d2514339a881d68a018fdbdc0b5589330de3" -} \ No newline at end of file diff --git a/.trellis/.version b/.trellis/.version deleted file mode 100644 index 60a2d3e9..00000000 --- a/.trellis/.version +++ /dev/null @@ -1 +0,0 @@ -0.4.0 \ No newline at end of file diff --git a/.trellis/config.yaml b/.trellis/config.yaml deleted file mode 100644 index 17c7d59d..00000000 --- a/.trellis/config.yaml +++ /dev/null @@ -1,53 +0,0 @@ -# Trellis Configuration -# Project-level settings for the Trellis workflow system -# -# All values have sensible defaults. Only override what you need. - -#------------------------------------------------------------------------------- -# Session Recording -#------------------------------------------------------------------------------- - -# Commit message used when auto-committing journal/index changes -# after running add_session.py -session_commit_message: "chore: record journal" - -# Maximum lines per journal file before rotating to a new one -max_journal_lines: 2000 - -#------------------------------------------------------------------------------- -# Task Lifecycle Hooks -#------------------------------------------------------------------------------- - -# Shell commands to run after task lifecycle events. -# Each hook receives TASK_JSON_PATH environment variable pointing to task.json. -# Hook failures print a warning but do not block the main operation. -# -# hooks: -# after_create: -# - "echo 'Task created'" -# after_start: -# - "echo 'Task started'" -# after_finish: -# - "echo 'Task finished'" -# after_archive: -# - "echo 'Task archived'" - -#------------------------------------------------------------------------------- -# Monorepo / Packages -#------------------------------------------------------------------------------- - -# Declare packages for monorepo projects. -# Trellis auto-detects workspaces during `trellis init`, but you can also -# configure them manually here. -# -# packages: -# frontend: -# path: packages/frontend -# backend: -# path: packages/backend -# docs: -# path: docs-site -# type: submodule - -# Default package used when --package is not specified. -# default_package: frontend diff --git a/.trellis/scripts/__init__.py b/.trellis/scripts/__init__.py deleted file mode 100755 index 815a1374..00000000 --- a/.trellis/scripts/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -""" -Trellis Python Scripts - -This module provides Python implementations of Trellis workflow scripts. -""" diff --git a/.trellis/scripts/add_session.py b/.trellis/scripts/add_session.py deleted file mode 100755 index be2c0056..00000000 --- a/.trellis/scripts/add_session.py +++ /dev/null @@ -1,521 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Add a new session to journal file and update index.md. - -Usage: - python3 add_session.py --title "Title" --commit "hash" --summary "Summary" [--package cli] - python3 add_session.py --title "Title" --branch "feat/my-branch" - - # Pipe detailed content via stdin (use --stdin to opt in): - cat << 'EOF' | python3 add_session.py --stdin --title "Title" --summary "Summary" - <session content here> - EOF - -Branch resolution order: - 1. --branch CLI arg (explicit) - 2. task.json branch field (from active task) - 3. git branch --show-current (auto-detect) - 4. None (omitted gracefully) -""" - -from __future__ import annotations - -import argparse -import re -import subprocess -import sys -from datetime import datetime -from pathlib import Path - -from common.paths import ( - FILE_JOURNAL_PREFIX, - get_repo_root, - get_current_task, - get_developer, - get_workspace_dir, -) -from common.developer import ensure_developer -from common.git import run_git -from common.tasks import load_task -from common.config import ( - get_packages, - get_session_commit_message, - get_max_journal_lines, - is_monorepo, - resolve_package, - validate_package, -) - - -# ============================================================================= -# Helper Functions -# ============================================================================= - -def get_latest_journal_info(dev_dir: Path) -> tuple[Path | None, int, int]: - """Get latest journal file info. - - Returns: - Tuple of (file_path, file_number, line_count). - """ - latest_file: Path | None = None - latest_num = -1 - - for f in dev_dir.glob(f"{FILE_JOURNAL_PREFIX}*.md"): - if not f.is_file(): - continue - - match = re.search(r"(\d+)$", f.stem) - if match: - num = int(match.group(1)) - if num > latest_num: - latest_num = num - latest_file = f - - if latest_file: - lines = len(latest_file.read_text(encoding="utf-8").splitlines()) - return latest_file, latest_num, lines - - return None, 0, 0 - - -def get_current_session(index_file: Path) -> int: - """Get current session number from index.md.""" - if not index_file.is_file(): - return 0 - - content = index_file.read_text(encoding="utf-8") - for line in content.splitlines(): - if "Total Sessions" in line: - match = re.search(r":\s*(\d+)", line) - if match: - return int(match.group(1)) - return 0 - - -def _extract_journal_num(filename: str) -> int: - """Extract journal number from filename for sorting.""" - match = re.search(r"(\d+)", filename) - return int(match.group(1)) if match else 0 - - -def count_journal_files(dev_dir: Path, active_num: int) -> str: - """Count journal files and return table rows.""" - active_file = f"{FILE_JOURNAL_PREFIX}{active_num}.md" - result_lines = [] - - files = sorted( - [f for f in dev_dir.glob(f"{FILE_JOURNAL_PREFIX}*.md") if f.is_file()], - key=lambda f: _extract_journal_num(f.stem), - reverse=True - ) - - for f in files: - filename = f.name - lines = len(f.read_text(encoding="utf-8").splitlines()) - status = "Active" if filename == active_file else "Archived" - result_lines.append(f"| `{filename}` | ~{lines} | {status} |") - - return "\n".join(result_lines) - - -def create_new_journal_file( - dev_dir: Path, num: int, developer: str, today: str, max_lines: int = 2000, -) -> Path: - """Create a new journal file.""" - prev_num = num - 1 - new_file = dev_dir / f"{FILE_JOURNAL_PREFIX}{num}.md" - - content = f"""# Journal - {developer} (Part {num}) - -> Continuation from `{FILE_JOURNAL_PREFIX}{prev_num}.md` (archived at ~{max_lines} lines) -> Started: {today} - ---- - -""" - new_file.write_text(content, encoding="utf-8") - return new_file - - -def generate_session_content( - session_num: int, - title: str, - commit: str, - summary: str, - extra_content: str, - today: str, - package: str | None = None, - branch: str | None = None, -) -> str: - """Generate session content.""" - if commit and commit != "-": - commit_table = """| Hash | Message | -|------|---------|""" - for c in commit.split(","): - c = c.strip() - commit_table += f"\n| `{c}` | (see git log) |" - else: - commit_table = "(No commits - planning session)" - - package_line = f"\n**Package**: {package}" if package else "" - branch_line = f"\n**Branch**: `{branch}`" if branch else "" - - return f""" - -## Session {session_num}: {title} - -**Date**: {today} -**Task**: {title}{package_line}{branch_line} - -### Summary - -{summary} - -### Main Changes - -{extra_content} - -### Git Commits - -{commit_table} - -### Testing - -- [OK] (Add test results) - -### Status - -[OK] **Completed** - -### Next Steps - -- None - task complete -""" - - -def update_index( - index_file: Path, - dev_dir: Path, - title: str, - commit: str, - new_session: int, - active_file: str, - today: str, - branch: str | None = None, -) -> bool: - """Update index.md with new session info.""" - # Format commit for display - commit_display = "-" - if commit and commit != "-": - commit_display = re.sub(r"([a-f0-9]{7,})", r"`\1`", commit.replace(",", ", ")) - - # Get file number from active_file name - match = re.search(r"(\d+)", active_file) - active_num = int(match.group(1)) if match else 0 - files_table = count_journal_files(dev_dir, active_num) - - print(f"Updating index.md for session {new_session}...") - print(f" Title: {title}") - print(f" Commit: {commit_display}") - print(f" Active File: {active_file}") - print() - - content = index_file.read_text(encoding="utf-8") - - if "@@@auto:current-status" not in content: - print("Error: Markers not found in index.md. Please ensure markers exist.", file=sys.stderr) - return False - - # Process sections - lines = content.splitlines() - new_lines = [] - - in_current_status = False - in_active_documents = False - in_session_history = False - header_written = False - - for line in lines: - if "@@@auto:current-status" in line: - new_lines.append(line) - in_current_status = True - new_lines.append(f"- **Active File**: `{active_file}`") - new_lines.append(f"- **Total Sessions**: {new_session}") - new_lines.append(f"- **Last Active**: {today}") - continue - - if "@@@/auto:current-status" in line: - in_current_status = False - new_lines.append(line) - continue - - if "@@@auto:active-documents" in line: - new_lines.append(line) - in_active_documents = True - new_lines.append("| File | Lines | Status |") - new_lines.append("|------|-------|--------|") - new_lines.append(files_table) - continue - - if "@@@/auto:active-documents" in line: - in_active_documents = False - new_lines.append(line) - continue - - if "@@@auto:session-history" in line: - new_lines.append(line) - in_session_history = True - header_written = False - continue - - if "@@@/auto:session-history" in line: - in_session_history = False - new_lines.append(line) - continue - - if in_current_status: - continue - - if in_active_documents: - continue - - if in_session_history: - # Migrate old 4/6-column headers to 5-column Branch-only history. - if re.match( - r"^\|\s*#\s*\|\s*Date\s*\|\s*Title\s*\|\s*Commits\s*\|\s*Branch\s*\|\s*Base Branch\s*\|\s*$", - line, - ): - new_lines.append("| # | Date | Title | Commits | Branch |") - continue - if re.match(r"^\|\s*#\s*\|\s*Date\s*\|\s*Title\s*\|\s*Commits\s*\|\s*Branch\s*\|\s*$", line): - new_lines.append("| # | Date | Title | Commits | Branch |") - continue - if re.match(r"^\|\s*#\s*\|\s*Date\s*\|\s*Title\s*\|\s*Commits\s*\|\s*$", line): - new_lines.append("| # | Date | Title | Commits | Branch |") - continue - if re.match(r"^\|[-| ]+\|\s*$", line) and not header_written: - new_lines.append("|---|------|-------|---------|--------|") - new_lines.append(f"| {new_session} | {today} | {title} | {commit_display} | `{branch or '-'}` |") - header_written = True - continue - new_lines.append(line) - continue - - new_lines.append(line) - - index_file.write_text("\n".join(new_lines), encoding="utf-8") - print("[OK] Updated index.md successfully!") - return True - - -# ============================================================================= -# Main Function -# ============================================================================= - -def _auto_commit_workspace(repo_root: Path) -> None: - """Stage .trellis/workspace and .trellis/tasks, then commit with a configured message.""" - commit_msg = get_session_commit_message(repo_root) - add_result = subprocess.run( - ["git", "add", "-A", ".trellis/workspace", ".trellis/tasks"], - cwd=repo_root, - capture_output=True, - text=True, - ) - if add_result.returncode != 0: - print(f"[WARN] git add failed (exit {add_result.returncode}): {add_result.stderr.strip()}", file=sys.stderr) - print("[WARN] Please commit .trellis/ changes manually: git add .trellis && git commit", file=sys.stderr) - return - # Check if there are staged changes - result = subprocess.run( - ["git", "diff", "--cached", "--quiet", "--", ".trellis/workspace", ".trellis/tasks"], - cwd=repo_root, - ) - if result.returncode == 0: - print("[OK] No workspace changes to commit.", file=sys.stderr) - return - commit_result = subprocess.run( - ["git", "commit", "-m", commit_msg], - cwd=repo_root, - capture_output=True, - text=True, - ) - if commit_result.returncode == 0: - print(f"[OK] Auto-committed: {commit_msg}", file=sys.stderr) - else: - print(f"[WARN] Auto-commit failed: {commit_result.stderr.strip()}", file=sys.stderr) - - -def add_session( - title: str, - commit: str = "-", - summary: str = "(Add summary)", - extra_content: str = "(Add details)", - auto_commit: bool = True, - package: str | None = None, - branch: str | None = None, -) -> int: - """Add a new session.""" - repo_root = get_repo_root() - ensure_developer(repo_root) - - developer = get_developer(repo_root) - if not developer: - print("Error: Developer not initialized", file=sys.stderr) - return 1 - - dev_dir = get_workspace_dir(repo_root) - if not dev_dir: - print("Error: Workspace directory not found", file=sys.stderr) - return 1 - - max_lines = get_max_journal_lines(repo_root) - - index_file = dev_dir / "index.md" - today = datetime.now().strftime("%Y-%m-%d") - - journal_file, current_num, current_lines = get_latest_journal_info(dev_dir) - current_session = get_current_session(index_file) - new_session = current_session + 1 - - session_content = generate_session_content( - new_session, title, commit, summary, extra_content, today, package, - branch, - ) - content_lines = len(session_content.splitlines()) - - print("========================================", file=sys.stderr) - print("ADD SESSION", file=sys.stderr) - print("========================================", file=sys.stderr) - print("", file=sys.stderr) - print(f"Session: {new_session}", file=sys.stderr) - print(f"Title: {title}", file=sys.stderr) - print(f"Commit: {commit}", file=sys.stderr) - print("", file=sys.stderr) - print(f"Current journal file: {FILE_JOURNAL_PREFIX}{current_num}.md", file=sys.stderr) - print(f"Current lines: {current_lines}", file=sys.stderr) - print(f"New content lines: {content_lines}", file=sys.stderr) - print(f"Total after append: {current_lines + content_lines}", file=sys.stderr) - print("", file=sys.stderr) - - target_file = journal_file - target_num = current_num - - if current_lines + content_lines > max_lines: - target_num = current_num + 1 - print(f"[!] Exceeds {max_lines} lines, creating {FILE_JOURNAL_PREFIX}{target_num}.md", file=sys.stderr) - target_file = create_new_journal_file(dev_dir, target_num, developer, today, max_lines) - print(f"Created: {target_file}", file=sys.stderr) - - # Append session content - if target_file: - with target_file.open("a", encoding="utf-8") as f: - f.write(session_content) - print(f"[OK] Appended session to {target_file.name}", file=sys.stderr) - - print("", file=sys.stderr) - - # Update index.md - active_file = f"{FILE_JOURNAL_PREFIX}{target_num}.md" - if not update_index( - index_file, - dev_dir, - title, - commit, - new_session, - active_file, - today, - branch, - ): - return 1 - - print("", file=sys.stderr) - print("========================================", file=sys.stderr) - print(f"[OK] Session {new_session} added successfully!", file=sys.stderr) - print("========================================", file=sys.stderr) - print("", file=sys.stderr) - print("Files updated:", file=sys.stderr) - print(f" - {target_file.name if target_file else 'journal'}", file=sys.stderr) - print(" - index.md", file=sys.stderr) - - # Auto-commit workspace changes - if auto_commit: - print("", file=sys.stderr) - _auto_commit_workspace(repo_root) - - return 0 - - -# ============================================================================= -# Main Entry -# ============================================================================= - -def main() -> int: - """CLI entry point.""" - parser = argparse.ArgumentParser( - description="Add a new session to journal file and update index.md" - ) - parser.add_argument("--title", required=True, help="Session title") - parser.add_argument("--commit", default="-", help="Comma-separated commit hashes") - parser.add_argument("--summary", default="(Add summary)", help="Brief summary") - parser.add_argument("--content-file", help="Path to file with detailed content") - parser.add_argument("--package", help="Package name tag (e.g., cli, docs-site)") - parser.add_argument("--branch", help="Branch name (auto-detected if omitted)") - parser.add_argument("--no-commit", action="store_true", - help="Skip auto-commit of workspace changes") - parser.add_argument("--stdin", action="store_true", - help="Read extra content from stdin (explicit opt-in)") - - args = parser.parse_args() - - extra_content = "(Add details)" - if args.content_file: - content_path = Path(args.content_file) - if content_path.is_file(): - extra_content = content_path.read_text(encoding="utf-8") - elif args.stdin: - extra_content = sys.stdin.read() - - # Load active task once — shared by package and branch resolution - repo_root = get_repo_root() - current = get_current_task(repo_root) - task_data = load_task(repo_root / current) if current else None - - package = args.package - if package: - # CLI source: fail-fast in monorepo, ignore in single-repo - if not is_monorepo(repo_root): - print("Warning: --package ignored in single-repo project", file=sys.stderr) - package = None - elif not validate_package(package, repo_root): - packages = get_packages(repo_root) - available = ", ".join(sorted(packages.keys())) if packages else "(none)" - print(f"Error: unknown package '{package}'. Available: {available}", file=sys.stderr) - return 1 - else: - # Inferred: active task's task.json.package → default_package → None - task_package = task_data.package if task_data else None - package = resolve_package(task_package, repo_root) - - # Resolve branch: CLI → task.json → git auto-detect → None - branch = args.branch - - if not branch: - if task_data and task_data.raw.get("branch"): - branch = task_data.raw["branch"] - else: - _, branch_out, _ = run_git(["branch", "--show-current"], cwd=repo_root) - detected = branch_out.strip() - if detected: - branch = detected - - return add_session( - args.title, args.commit, args.summary, extra_content, - auto_commit=not args.no_commit, - package=package, - branch=branch, - ) - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/.trellis/scripts/common/__init__.py b/.trellis/scripts/common/__init__.py deleted file mode 100755 index 6c3431e0..00000000 --- a/.trellis/scripts/common/__init__.py +++ /dev/null @@ -1,84 +0,0 @@ -""" -Common utilities for Trellis workflow scripts. - -This module provides shared functionality used by other Trellis scripts. -""" - -import io -import sys - -# ============================================================================= -# Windows Encoding Fix (MUST be at top, before any other output) -# ============================================================================= -# On Windows, stdout defaults to the system code page (often GBK/CP936). -# This causes UnicodeEncodeError when printing non-ASCII characters. -# -# Any script that imports from common will automatically get this fix. -# ============================================================================= - - -def _configure_stream(stream: object) -> object: - """Configure a stream for UTF-8 encoding on Windows.""" - # Try reconfigure() first (Python 3.7+, more reliable) - if hasattr(stream, "reconfigure"): - stream.reconfigure(encoding="utf-8", errors="replace") # type: ignore[union-attr] - return stream - # Fallback: detach and rewrap with TextIOWrapper - elif hasattr(stream, "detach"): - return io.TextIOWrapper( - stream.detach(), # type: ignore[union-attr] - encoding="utf-8", - errors="replace", - ) - return stream - - -if sys.platform == "win32": - sys.stdout = _configure_stream(sys.stdout) # type: ignore[assignment] - sys.stderr = _configure_stream(sys.stderr) # type: ignore[assignment] - sys.stdin = _configure_stream(sys.stdin) # type: ignore[assignment] - - -def configure_encoding() -> None: - """ - Configure stdout/stderr/stdin for UTF-8 encoding on Windows. - - This is automatically called when importing from common, - but can be called manually for scripts that don't import common. - - Safe to call multiple times. - """ - global sys - if sys.platform == "win32": - sys.stdout = _configure_stream(sys.stdout) # type: ignore[assignment] - sys.stderr = _configure_stream(sys.stderr) # type: ignore[assignment] - sys.stdin = _configure_stream(sys.stdin) # type: ignore[assignment] - - -from .paths import ( - DIR_WORKFLOW, - DIR_WORKSPACE, - DIR_TASKS, - DIR_ARCHIVE, - DIR_SPEC, - DIR_SCRIPTS, - FILE_DEVELOPER, - FILE_CURRENT_TASK, - FILE_TASK_JSON, - FILE_JOURNAL_PREFIX, - get_repo_root, - get_developer, - check_developer, - get_tasks_dir, - get_workspace_dir, - get_active_journal_file, - count_lines, - get_current_task, - get_current_task_abs, - normalize_task_ref, - resolve_task_ref, - set_current_task, - clear_current_task, - has_current_task, - generate_task_date_prefix, -) diff --git a/.trellis/scripts/common/cli_adapter.py b/.trellis/scripts/common/cli_adapter.py deleted file mode 100755 index 12b29308..00000000 --- a/.trellis/scripts/common/cli_adapter.py +++ /dev/null @@ -1,753 +0,0 @@ -""" -CLI Adapter for Multi-Platform Support. - -Abstracts differences between Claude Code, OpenCode, Cursor, iFlow, Codex, Kilo, Kiro Code, Gemini CLI, Antigravity, Windsurf, Qoder, CodeBuddy, GitHub Copilot, and Factory Droid interfaces. - -Supported platforms: -- claude: Claude Code (default) -- opencode: OpenCode -- cursor: Cursor IDE -- iflow: iFlow CLI -- codex: Codex CLI (skills-based) -- kilo: Kilo CLI -- kiro: Kiro Code (skills-based) -- gemini: Gemini CLI -- antigravity: Antigravity (workflow-based) -- windsurf: Windsurf (workflow-based) -- qoder: Qoder -- codebuddy: CodeBuddy -- copilot: GitHub Copilot (VS Code) -- droid: Factory Droid (commands-based) - -Usage: - from common.cli_adapter import CLIAdapter - - adapter = CLIAdapter("opencode") - cmd = adapter.build_run_command( - agent="dispatch", - session_id="abc123", - prompt="Start the pipeline" - ) -""" - -from __future__ import annotations - -from dataclasses import dataclass -from pathlib import Path -from typing import ClassVar, Literal - -Platform = Literal[ - "claude", - "opencode", - "cursor", - "iflow", - "codex", - "kilo", - "kiro", - "gemini", - "antigravity", - "windsurf", - "qoder", - "codebuddy", - "copilot", - "droid", -] - - -@dataclass -class CLIAdapter: - """Adapter for different AI coding CLI tools.""" - - platform: Platform - - # ========================================================================= - # Agent Name Mapping - # ========================================================================= - - # OpenCode has built-in agents that cannot be overridden - # See: https://github.com/sst/opencode/issues/4271 - # Note: Class-level constant, not a dataclass field - _AGENT_NAME_MAP: ClassVar[dict[Platform, dict[str, str]]] = { - "claude": {}, # No mapping needed - "opencode": { - "plan": "trellis-plan", # 'plan' is built-in in OpenCode - }, - } - - def get_agent_name(self, agent: str) -> str: - """Get platform-specific agent name. - - Args: - agent: Original agent name (e.g., 'plan', 'dispatch') - - Returns: - Platform-specific agent name (e.g., 'trellis-plan' for OpenCode) - """ - mapping = self._AGENT_NAME_MAP.get(self.platform, {}) - return mapping.get(agent, agent) - - # ========================================================================= - # Agent Path - # ========================================================================= - - @property - def config_dir_name(self) -> str: - """Get platform-specific config directory name. - - Returns: - Directory name ('.claude', '.opencode', '.cursor', '.iflow', '.codex', '.kilocode', '.kiro', '.gemini', '.agent', '.windsurf', '.qoder', or '.codebuddy') - """ - if self.platform == "opencode": - return ".opencode" - elif self.platform == "cursor": - return ".cursor" - elif self.platform == "iflow": - return ".iflow" - elif self.platform == "codex": - return ".codex" - elif self.platform == "kilo": - return ".kilocode" - elif self.platform == "kiro": - return ".kiro" - elif self.platform == "gemini": - return ".gemini" - elif self.platform == "antigravity": - return ".agent" - elif self.platform == "windsurf": - return ".windsurf" - elif self.platform == "qoder": - return ".qoder" - elif self.platform == "codebuddy": - return ".codebuddy" - elif self.platform == "copilot": - return ".github/copilot" - elif self.platform == "droid": - return ".factory" - else: - return ".claude" - - def get_config_dir(self, project_root: Path) -> Path: - """Get platform-specific config directory. - - Args: - project_root: Project root directory - - Returns: - Path to config directory (.claude, .opencode, .cursor, .iflow, .codex, .kilocode, .kiro, .gemini, .agent, .windsurf, .qoder, or .codebuddy) - """ - return project_root / self.config_dir_name - - def get_agent_path(self, agent: str, project_root: Path) -> Path: - """Get path to agent definition file. - - Args: - agent: Agent name (original, before mapping) - project_root: Project root directory - - Returns: - Path to agent definition file (.md for most platforms, .toml for Codex) - """ - mapped_name = self.get_agent_name(agent) - if self.platform == "codex": - return self.get_config_dir(project_root) / "agents" / f"{mapped_name}.toml" - return self.get_config_dir(project_root) / "agents" / f"{mapped_name}.md" - - def get_commands_path(self, project_root: Path, *parts: str) -> Path: - """Get path to commands directory or specific command file. - - Args: - project_root: Project root directory - *parts: Additional path parts (e.g., 'trellis', 'finish-work.md') - - Returns: - Path to commands directory or file - - Note: - Cursor uses prefix naming: .cursor/commands/trellis-<name>.md - Antigravity uses workflow directory: .agent/workflows/<name>.md - Windsurf uses workflow directory: .windsurf/workflows/trellis-<name>.md - Copilot uses prompt files: .github/prompts/<name>.prompt.md - Claude/OpenCode use subdirectory: .claude/commands/trellis/<name>.md - """ - if self.platform == "windsurf": - workflow_dir = self.get_config_dir(project_root) / "workflows" - if not parts: - return workflow_dir - if len(parts) >= 2 and parts[0] == "trellis": - filename = parts[-1] - return workflow_dir / f"trellis-{filename}" - return workflow_dir / Path(*parts) - - if self.platform in ("antigravity", "kilo"): - workflow_dir = self.get_config_dir(project_root) / "workflows" - if not parts: - return workflow_dir - if len(parts) >= 2 and parts[0] == "trellis": - filename = parts[-1] - return workflow_dir / filename - return workflow_dir / Path(*parts) - - if self.platform == "copilot": - prompts_dir = project_root / ".github" / "prompts" - if not parts: - return prompts_dir - if len(parts) >= 2 and parts[0] == "trellis": - filename = parts[-1] - if filename.endswith(".md"): - filename = filename[:-3] - return prompts_dir / f"{filename}.prompt.md" - return prompts_dir / Path(*parts) - - if not parts: - return self.get_config_dir(project_root) / "commands" - - # Cursor uses prefix naming instead of subdirectory - if self.platform == "cursor" and len(parts) >= 2 and parts[0] == "trellis": - # Convert trellis/<name>.md to trellis-<name>.md - filename = parts[-1] - return ( - self.get_config_dir(project_root) / "commands" / f"trellis-{filename}" - ) - - return self.get_config_dir(project_root) / "commands" / Path(*parts) - - def get_trellis_command_path(self, name: str) -> str: - """Get relative path to a trellis command file. - - Args: - name: Command name without extension (e.g., 'finish-work', 'check') - - Returns: - Relative path string for use in JSONL entries - - Note: - Cursor: .cursor/commands/trellis-<name>.md - Codex: .agents/skills/<name>/SKILL.md - Kiro: .kiro/skills/<name>/SKILL.md - Gemini: .gemini/commands/trellis/<name>.toml - Antigravity: .agent/workflows/<name>.md - Windsurf: .windsurf/workflows/trellis-<name>.md - Others: .{platform}/commands/trellis/<name>.md - """ - if self.platform == "cursor": - return f".cursor/commands/trellis-{name}.md" - elif self.platform == "codex": - return f".agents/skills/{name}/SKILL.md" - elif self.platform == "kiro": - return f".kiro/skills/{name}/SKILL.md" - elif self.platform == "gemini": - return f".gemini/commands/trellis/{name}.toml" - elif self.platform == "antigravity": - return f".agent/workflows/{name}.md" - elif self.platform == "windsurf": - return f".windsurf/workflows/trellis-{name}.md" - elif self.platform == "kilo": - return f".kilocode/workflows/{name}.md" - elif self.platform == "copilot": - return f".github/prompts/{name}.prompt.md" - elif self.platform == "droid": - return f".factory/commands/trellis/{name}.md" - else: - return f"{self.config_dir_name}/commands/trellis/{name}.md" - - # ========================================================================= - # Environment Variables - # ========================================================================= - - def get_non_interactive_env(self) -> dict[str, str]: - """Get environment variables for non-interactive mode. - - Returns: - Dict of environment variables to set - """ - if self.platform == "opencode": - return {"OPENCODE_NON_INTERACTIVE": "1"} - elif self.platform == "iflow": - return {"IFLOW_NON_INTERACTIVE": "1"} - elif self.platform == "codex": - return {"CODEX_NON_INTERACTIVE": "1"} - elif self.platform == "kiro": - return {"KIRO_NON_INTERACTIVE": "1"} - elif self.platform == "gemini": - return {} # Gemini CLI doesn't have a non-interactive env var - elif self.platform == "antigravity": - return {} - elif self.platform == "windsurf": - return {} - elif self.platform == "qoder": - return {} - elif self.platform == "codebuddy": - return {} - elif self.platform == "copilot": - return {} - elif self.platform == "droid": - return {} - else: - return {"CLAUDE_NON_INTERACTIVE": "1"} - - # ========================================================================= - # CLI Command Building - # ========================================================================= - - def build_run_command( - self, - agent: str, - prompt: str, - session_id: str | None = None, - skip_permissions: bool = True, - verbose: bool = True, - json_output: bool = True, - ) -> list[str]: - """Build CLI command for running an agent. - - Args: - agent: Agent name (will be mapped if needed) - prompt: Prompt to send to the agent - session_id: Optional session ID (Claude Code only for creation) - skip_permissions: Whether to skip permission prompts - verbose: Whether to enable verbose output - json_output: Whether to use JSON output format - - Returns: - List of command arguments - """ - mapped_agent = self.get_agent_name(agent) - - if self.platform == "opencode": - cmd = ["opencode", "run"] - cmd.extend(["--agent", mapped_agent]) - - # Note: OpenCode 'run' mode is non-interactive by default - # No equivalent to Claude Code's --dangerously-skip-permissions - # See: https://github.com/anomalyco/opencode/issues/9070 - - if json_output: - cmd.extend(["--format", "json"]) - - if verbose: - cmd.extend(["--log-level", "DEBUG", "--print-logs"]) - - # Note: OpenCode doesn't support --session-id on creation - # Session ID must be extracted from logs after startup - - cmd.append(prompt) - - elif self.platform == "iflow": - cmd = ["iflow", "-y", "-p"] - cmd.append(f"${mapped_agent} {prompt}") - elif self.platform == "codex": - cmd = ["codex", "exec"] - cmd.append(prompt) - elif self.platform == "kiro": - cmd = ["kiro", "run", prompt] - elif self.platform == "gemini": - cmd = ["gemini"] - cmd.append(prompt) - elif self.platform == "antigravity": - raise ValueError( - "Antigravity workflows are UI slash commands; CLI agent run is not supported." - ) - elif self.platform == "windsurf": - raise ValueError( - "Windsurf workflows are UI slash commands; CLI agent run is not supported." - ) - elif self.platform == "qoder": - cmd = ["qodercli", "-p", prompt] - elif self.platform == "codebuddy": - raise ValueError( - "CodeBuddy does not support non-interactive mode (no CLI agent)" - ) - elif self.platform == "copilot": - raise ValueError( - "GitHub Copilot is IDE-only; CLI agent run is not supported." - ) - elif self.platform == "droid": - raise ValueError( - "Factory Droid CLI agent run is not yet integrated with Trellis multi-agent." - ) - - else: # claude - cmd = ["claude", "-p"] - cmd.extend(["--agent", mapped_agent]) - - if session_id: - cmd.extend(["--session-id", session_id]) - - if skip_permissions: - cmd.append("--dangerously-skip-permissions") - - if json_output: - cmd.extend(["--output-format", "stream-json"]) - - if verbose: - cmd.append("--verbose") - - cmd.append(prompt) - - return cmd - - def build_resume_command(self, session_id: str) -> list[str]: - """Build CLI command for resuming a session. - - Args: - session_id: Session ID to resume (ignored for iFlow) - - Returns: - List of command arguments - """ - if self.platform == "opencode": - return ["opencode", "run", "--session", session_id] - elif self.platform == "iflow": - # iFlow uses -c to continue most recent conversation - # session_id is ignored as iFlow doesn't support session IDs - return ["iflow", "-c"] - elif self.platform == "codex": - return ["codex", "resume", session_id] - elif self.platform == "kiro": - return ["kiro", "resume", session_id] - elif self.platform == "gemini": - return ["gemini", "--resume", session_id] - elif self.platform == "antigravity": - raise ValueError( - "Antigravity workflows are UI slash commands; CLI resume is not supported." - ) - elif self.platform == "windsurf": - raise ValueError( - "Windsurf workflows are UI slash commands; CLI resume is not supported." - ) - elif self.platform == "qoder": - return ["qodercli", "--resume", session_id] - elif self.platform == "codebuddy": - raise ValueError( - "CodeBuddy does not support non-interactive mode (no CLI agent)" - ) - elif self.platform == "copilot": - raise ValueError( - "GitHub Copilot is IDE-only; CLI resume is not supported." - ) - elif self.platform == "droid": - raise ValueError( - "Factory Droid CLI resume is not yet integrated with Trellis multi-agent." - ) - else: - return ["claude", "--resume", session_id] - - def get_resume_command_str(self, session_id: str, cwd: str | None = None) -> str: - """Get human-readable resume command string. - - Args: - session_id: Session ID to resume - cwd: Optional working directory to cd into - - Returns: - Command string for display - """ - cmd = self.build_resume_command(session_id) - cmd_str = " ".join(cmd) - - if cwd: - return f"cd {cwd} && {cmd_str}" - return cmd_str - - # ========================================================================= - # Platform Detection Helpers - # ========================================================================= - - @property - def is_opencode(self) -> bool: - """Check if platform is OpenCode.""" - return self.platform == "opencode" - - @property - def is_claude(self) -> bool: - """Check if platform is Claude Code.""" - return self.platform == "claude" - - @property - def is_cursor(self) -> bool: - """Check if platform is Cursor.""" - return self.platform == "cursor" - - @property - def is_iflow(self) -> bool: - """Check if platform is iFlow CLI.""" - return self.platform == "iflow" - - @property - def cli_name(self) -> str: - """Get CLI executable name. - - Note: Cursor doesn't have a CLI tool, returns None-like value. - """ - if self.is_opencode: - return "opencode" - elif self.is_cursor: - return "cursor" # Note: Cursor is IDE-only, no CLI - elif self.platform == "iflow": - return "iflow" - elif self.platform == "kiro": - return "kiro" - elif self.platform == "gemini": - return "gemini" - elif self.platform == "antigravity": - return "agy" - elif self.platform == "windsurf": - return "windsurf" - elif self.platform == "qoder": - return "qodercli" - elif self.platform == "codebuddy": - return "codebuddy" - elif self.platform == "copilot": - return "copilot" - elif self.platform == "droid": - return "droid" - else: - return "claude" - - @property - def supports_cli_agents(self) -> bool: - """Check if platform supports running agents via CLI. - - Claude Code, OpenCode, iFlow, and Codex support CLI agent execution. - Cursor is IDE-only and doesn't support CLI agents. - """ - return self.platform in ("claude", "opencode", "iflow", "codex") - - @property - def requires_agent_definition_file(self) -> bool: - """Check if platform requires an agent definition file (.md/.toml) to run. - - Claude Code, OpenCode, iFlow: require agent .md files (--agent flag). - Codex: auto-discovers agents from .codex/agents/*.toml, no --agent flag. - """ - return self.platform in ("claude", "opencode", "iflow") - - # ========================================================================= - # Session ID Handling - # ========================================================================= - - @property - def supports_session_id_on_create(self) -> bool: - """Check if platform supports specifying session ID on creation. - - Claude Code: Yes (--session-id) - OpenCode: No (auto-generated, extract from logs) - iFlow: No (no session ID support) - """ - return self.platform == "claude" - - def extract_session_id_from_log(self, log_content: str) -> str | None: - """Extract session ID from log output (OpenCode only). - - OpenCode generates session IDs in format: ses_xxx - - Args: - log_content: Log file content - - Returns: - Session ID if found, None otherwise - """ - import re - - # OpenCode session ID pattern - match = re.search(r"ses_[a-zA-Z0-9]+", log_content) - if match: - return match.group(0) - return None - - -# ============================================================================= -# Factory Function -# ============================================================================= - - -def get_cli_adapter(platform: str = "claude") -> CLIAdapter: - """Get CLI adapter for the specified platform. - - Args: - platform: Platform name ('claude', 'opencode', 'cursor', 'iflow', 'codex', 'kilo', 'kiro', 'gemini', 'antigravity', 'windsurf', 'qoder', or 'codebuddy') - - Returns: - CLIAdapter instance - - Raises: - ValueError: If platform is not supported - """ - if platform not in ( - "claude", - "opencode", - "cursor", - "iflow", - "codex", - "kilo", - "kiro", - "gemini", - "antigravity", - "windsurf", - "qoder", - "codebuddy", - "copilot", - "droid", - ): - raise ValueError( - f"Unsupported platform: {platform} (must be 'claude', 'opencode', 'cursor', 'iflow', 'codex', 'kilo', 'kiro', 'gemini', 'antigravity', 'windsurf', 'qoder', 'codebuddy', 'copilot', or 'droid')" - ) - - return CLIAdapter(platform=platform) # type: ignore - - -_ALL_PLATFORM_CONFIG_DIRS = ( - ".claude", - ".cursor", - ".iflow", - ".opencode", - ".agents", - ".codex", - ".kilocode", - ".kiro", - ".gemini", - ".agent", - ".windsurf", - ".qoder", - ".codebuddy", - ".github/copilot", - ".factory", -) -"""All platform config directory names (used by detect_platform exclusion checks).""" - - -def _has_other_platform_dir(project_root: Path, exclude: set[str]) -> bool: - """Check if any platform config dir exists besides those in *exclude*.""" - return any( - (project_root / d).is_dir() - for d in _ALL_PLATFORM_CONFIG_DIRS - if d not in exclude - ) - - -def detect_platform(project_root: Path) -> Platform: - """Auto-detect platform based on existing config directories. - - Detection order: - 1. TRELLIS_PLATFORM environment variable (if set) - 2. .opencode directory exists → opencode - 3. .iflow directory exists → iflow - 4. .cursor directory exists (without .claude) → cursor - 5. .codex exists and no other platform dirs → codex - 6. .kilocode directory exists → kilo - 7. .kiro/skills exists and no other platform dirs → kiro - 8. .gemini directory exists → gemini - 9. .agent/workflows exists and no other platform dirs → antigravity - 10. .windsurf/workflows exists and no other platform dirs → windsurf - 11. .codebuddy directory exists → codebuddy - 12. .qoder directory exists → qoder - 13. Default → claude - - Args: - project_root: Project root directory - - Returns: - Detected platform ('claude', 'opencode', 'cursor', 'iflow', 'codex', 'kilo', 'kiro', 'gemini', 'antigravity', 'windsurf', 'qoder', 'codebuddy', or default 'claude') - """ - import os - - # Check environment variable first - env_platform = os.environ.get("TRELLIS_PLATFORM", "").lower() - if env_platform in ( - "claude", - "opencode", - "cursor", - "iflow", - "codex", - "kilo", - "kiro", - "gemini", - "antigravity", - "windsurf", - "qoder", - "codebuddy", - "copilot", - "droid", - ): - return env_platform # type: ignore - - # Check for .opencode directory (OpenCode-specific) - if (project_root / ".opencode").is_dir(): - return "opencode" - - # Check for .iflow directory (iFlow-specific) - if (project_root / ".iflow").is_dir(): - return "iflow" - - # Check for .cursor directory (Cursor-specific) - # Only detect as cursor if .claude doesn't exist (to avoid confusion) - if (project_root / ".cursor").is_dir() and not (project_root / ".claude").is_dir(): - return "cursor" - - # Check for .gemini directory (Gemini CLI-specific) - if (project_root / ".gemini").is_dir(): - return "gemini" - - # Check for .codex directory (Codex-specific) - # .agents/skills/ alone does NOT trigger codex detection (it's a shared standard) - if (project_root / ".codex").is_dir() and not _has_other_platform_dir( - project_root, {".codex", ".agents"} - ): - return "codex" - - # Check for .kilocode directory (Kilo-specific) - if (project_root / ".kilocode").is_dir(): - return "kilo" - - # Check for Kiro skills directory only when no other platform config exists - if (project_root / ".kiro" / "skills").is_dir() and not _has_other_platform_dir( - project_root, {".kiro"} - ): - return "kiro" - - # Check for Antigravity workflow directory only when no other platform config exists - if ( - project_root / ".agent" / "workflows" - ).is_dir() and not _has_other_platform_dir( - project_root, {".agent", ".gemini"} - ): - return "antigravity" - - # Check for Windsurf workflow directory only when no other platform config exists - if ( - project_root / ".windsurf" / "workflows" - ).is_dir() and not _has_other_platform_dir( - project_root, {".windsurf"} - ): - return "windsurf" - - # Check for .codebuddy directory (CodeBuddy-specific) - if (project_root / ".codebuddy").is_dir(): - return "codebuddy" - - # Check for .qoder directory (Qoder-specific) - if (project_root / ".qoder").is_dir(): - return "qoder" - - # Check for .github/copilot directory (GitHub Copilot-specific) - if (project_root / ".github" / "copilot").is_dir(): - return "copilot" - - # Check for .factory directory (Factory Droid-specific) - if (project_root / ".factory").is_dir(): - return "droid" - - return "claude" - - -def get_cli_adapter_auto(project_root: Path) -> CLIAdapter: - """Get CLI adapter with auto-detected platform. - - Args: - project_root: Project root directory - - Returns: - CLIAdapter instance for detected platform - """ - platform = detect_platform(project_root) - return CLIAdapter(platform=platform) diff --git a/.trellis/scripts/common/config.py b/.trellis/scripts/common/config.py deleted file mode 100755 index ea1bdc36..00000000 --- a/.trellis/scripts/common/config.py +++ /dev/null @@ -1,264 +0,0 @@ -#!/usr/bin/env python3 -""" -Trellis configuration reader. - -Reads settings from .trellis/config.yaml with sensible defaults. -""" - -from __future__ import annotations - -import sys -from pathlib import Path - -from .paths import DIR_WORKFLOW, get_repo_root -from .worktree import parse_simple_yaml - - -# Defaults -DEFAULT_SESSION_COMMIT_MESSAGE = "chore: record journal" -DEFAULT_MAX_JOURNAL_LINES = 2000 - -CONFIG_FILE = "config.yaml" - - -def _is_true_config_value(value: object) -> bool: - """Return True when a config value represents an enabled flag.""" - if isinstance(value, bool): - return value - if isinstance(value, str): - return value.strip().lower() == "true" - return False - - -def _get_config_path(repo_root: Path | None = None) -> Path: - """Get path to config.yaml.""" - root = repo_root or get_repo_root() - return root / DIR_WORKFLOW / CONFIG_FILE - - -def _load_config(repo_root: Path | None = None) -> dict: - """Load and parse config.yaml. Returns empty dict on any error.""" - config_file = _get_config_path(repo_root) - try: - content = config_file.read_text(encoding="utf-8") - return parse_simple_yaml(content) - except (OSError, IOError): - return {} - - -def get_session_commit_message(repo_root: Path | None = None) -> str: - """Get the commit message for auto-committing session records.""" - config = _load_config(repo_root) - return config.get("session_commit_message", DEFAULT_SESSION_COMMIT_MESSAGE) - - -def get_max_journal_lines(repo_root: Path | None = None) -> int: - """Get the maximum lines per journal file.""" - config = _load_config(repo_root) - value = config.get("max_journal_lines", DEFAULT_MAX_JOURNAL_LINES) - try: - return int(value) - except (ValueError, TypeError): - return DEFAULT_MAX_JOURNAL_LINES - - -def get_hooks(event: str, repo_root: Path | None = None) -> list[str]: - """Get hook commands for a lifecycle event. - - Args: - event: Event name (e.g. "after_create", "after_archive"). - repo_root: Repository root path. - - Returns: - List of shell commands to execute, empty if none configured. - """ - config = _load_config(repo_root) - hooks = config.get("hooks") - if not isinstance(hooks, dict): - return [] - commands = hooks.get(event) - if isinstance(commands, list): - return [str(c) for c in commands] - return [] - - -# ============================================================================= -# Monorepo / Packages -# ============================================================================= - - -def get_packages(repo_root: Path | None = None) -> dict[str, dict] | None: - """Get monorepo package declarations. - - Returns: - Dict mapping package name to its config (path, type, etc.), - or None if not configured (single-repo mode). - - Example return: - {"cli": {"path": "packages/cli"}, "docs-site": {"path": "docs-site", "type": "submodule"}} - """ - config = _load_config(repo_root) - packages = config.get("packages") - if not isinstance(packages, dict): - return None - # Ensure each value is a dict (filter out scalar entries) - filtered = {k: v for k, v in packages.items() if isinstance(v, dict)} - if not filtered: - return None - return filtered - - -def get_default_package(repo_root: Path | None = None) -> str | None: - """Get the default package name from config. - - Returns: - Package name string, or None if not configured. - """ - config = _load_config(repo_root) - value = config.get("default_package") - return str(value) if value else None - - -def get_submodule_packages(repo_root: Path | None = None) -> dict[str, str]: - """Get packages that are git submodules. - - Returns: - Dict mapping package name to its path for submodule-type packages. - Empty dict if none configured. - - Example return: - {"docs-site": "docs-site"} - """ - packages = get_packages(repo_root) - if packages is None: - return {} - return { - name: cfg.get("path", name) - for name, cfg in packages.items() - if cfg.get("type") == "submodule" - } - - -def get_git_packages(repo_root: Path | None = None) -> dict[str, str]: - """Get packages that have their own independent git repository. - - These are sub-directories with their own .git (not submodules), - marked with ``git: true`` in config.yaml. - - Returns: - Dict mapping package name to its path for git-repo packages. - Empty dict if none configured. - - Example config:: - - packages: - backend: - path: iqs - git: true - - Example return:: - - {"backend": "iqs"} - """ - packages = get_packages(repo_root) - if packages is None: - return {} - return { - name: cfg.get("path", name) - for name, cfg in packages.items() - if _is_true_config_value(cfg.get("git")) - } - - -def is_monorepo(repo_root: Path | None = None) -> bool: - """Check if the project is configured as a monorepo (has packages in config).""" - return get_packages(repo_root) is not None - - -def get_spec_base(package: str | None = None, repo_root: Path | None = None) -> str: - """Get the spec directory base path relative to .trellis/. - - Single-repo: returns "spec" - Monorepo with package: returns "spec/<package>" - Monorepo without package: returns "spec" (caller should specify package) - """ - if package and is_monorepo(repo_root): - return f"spec/{package}" - return "spec" - - -def validate_package(package: str, repo_root: Path | None = None) -> bool: - """Check if a package name is valid in this project. - - Single-repo (no packages configured): always returns True. - Monorepo: returns True only if package exists in config.yaml packages. - """ - packages = get_packages(repo_root) - if packages is None: - return True # Single-repo, no validation needed - return package in packages - - -def resolve_package( - task_package: str | None = None, - repo_root: Path | None = None, -) -> str | None: - """Resolve package from inferred sources with validation. - - Checks in order: task_package → default_package. - Invalid inferred values print a warning to stderr and are skipped. - - Returns: - Resolved package name, or None if no valid package found. - - Note: - CLI --package should be validated separately by the caller - (fail-fast with available packages list on error). - """ - packages = get_packages(repo_root) - if packages is None: - return None # Single-repo, no package needed - - # Try task_package (guard against non-string values from malformed JSON) - if task_package and isinstance(task_package, str): - if task_package in packages: - return task_package - print( - f"Warning: task.json package '{task_package}' not found in config, skipping", - file=sys.stderr, - ) - - # Try default_package - default = get_default_package(repo_root) - if default: - if default in packages: - return default - print( - f"Warning: default_package '{default}' not found in config, skipping", - file=sys.stderr, - ) - - return None - - -def get_spec_scope(repo_root: Path | None = None) -> list[str] | str | None: - """Get session.spec_scope configuration. - - Returns: - list[str]: Package names to include in spec scanning. - str: "active_task" to use current task's package. - None: No scope configured (scan all packages). - """ - config = _load_config(repo_root) - session = config.get("session") - if not isinstance(session, dict): - return None - - scope = session.get("spec_scope") - if scope is None: - return None - if isinstance(scope, str): - return scope # e.g. "active_task" - if isinstance(scope, list): - return [str(s) for s in scope] - return None diff --git a/.trellis/scripts/common/developer.py b/.trellis/scripts/common/developer.py deleted file mode 100755 index c203a316..00000000 --- a/.trellis/scripts/common/developer.py +++ /dev/null @@ -1,190 +0,0 @@ -#!/usr/bin/env python3 -""" -Developer management utilities. - -Provides: - init_developer - Initialize developer - ensure_developer - Ensure developer is initialized (exit if not) - show_developer_info - Show developer information -""" - -from __future__ import annotations - -import sys -from datetime import datetime -from pathlib import Path - -from .paths import ( - DIR_WORKFLOW, - DIR_WORKSPACE, - DIR_TASKS, - FILE_DEVELOPER, - FILE_JOURNAL_PREFIX, - get_repo_root, - get_developer, - check_developer, -) - - -# ============================================================================= -# Developer Initialization -# ============================================================================= - -def init_developer(name: str, repo_root: Path | None = None) -> bool: - """Initialize developer. - - Creates: - - .trellis/.developer file with developer info - - .trellis/workspace/<name>/ directory structure - - Initial journal file and index.md - - Args: - name: Developer name. - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - True on success, False on error. - """ - if not name: - print("Error: developer name is required", file=sys.stderr) - return False - - if repo_root is None: - repo_root = get_repo_root() - - dev_file = repo_root / DIR_WORKFLOW / FILE_DEVELOPER - workspace_dir = repo_root / DIR_WORKFLOW / DIR_WORKSPACE / name - - # Create .developer file - initialized_at = datetime.now().isoformat() - try: - dev_file.write_text( - f"name={name}\ninitialized_at={initialized_at}\n", - encoding="utf-8" - ) - except (OSError, IOError) as e: - print(f"Error: Failed to create .developer file: {e}", file=sys.stderr) - return False - - # Create workspace directory structure - try: - workspace_dir.mkdir(parents=True, exist_ok=True) - except (OSError, IOError) as e: - print(f"Error: Failed to create workspace directory: {e}", file=sys.stderr) - return False - - # Create initial journal file - journal_file = workspace_dir / f"{FILE_JOURNAL_PREFIX}1.md" - if not journal_file.exists(): - today = datetime.now().strftime("%Y-%m-%d") - journal_content = f"""# Journal - {name} (Part 1) - -> AI development session journal -> Started: {today} - ---- - -""" - try: - journal_file.write_text(journal_content, encoding="utf-8") - except (OSError, IOError) as e: - print(f"Error: Failed to create journal file: {e}", file=sys.stderr) - return False - - # Create index.md with markers for auto-update - index_file = workspace_dir / "index.md" - if not index_file.exists(): - index_content = f"""# Workspace Index - {name} - -> Journal tracking for AI development sessions. - ---- - -## Current Status - -<!-- @@@auto:current-status --> -- **Active File**: `journal-1.md` -- **Total Sessions**: 0 -- **Last Active**: - -<!-- @@@/auto:current-status --> - ---- - -## Active Documents - -<!-- @@@auto:active-documents --> -| File | Lines | Status | -|------|-------|--------| -| `journal-1.md` | ~0 | Active | -<!-- @@@/auto:active-documents --> - ---- - -## Session History - -<!-- @@@auto:session-history --> -| # | Date | Title | Commits | Branch | -|---|------|-------|---------|--------| -<!-- @@@/auto:session-history --> - ---- - -## Notes - -- Sessions are appended to journal files -- New journal file created when current exceeds 2000 lines -- Use `add_session.py` to record sessions -""" - try: - index_file.write_text(index_content, encoding="utf-8") - except (OSError, IOError) as e: - print(f"Error: Failed to create index.md: {e}", file=sys.stderr) - return False - - print(f"Developer initialized: {name}") - print(f" .developer file: {dev_file}") - print(f" Workspace dir: {workspace_dir}") - - return True - - -def ensure_developer(repo_root: Path | None = None) -> None: - """Ensure developer is initialized, exit if not. - - Args: - repo_root: Repository root path. Defaults to auto-detected. - """ - if repo_root is None: - repo_root = get_repo_root() - - if not check_developer(repo_root): - print("Error: Developer not initialized.", file=sys.stderr) - print(f"Run: python3 ./{DIR_WORKFLOW}/scripts/init_developer.py <your-name>", file=sys.stderr) - sys.exit(1) - - -def show_developer_info(repo_root: Path | None = None) -> None: - """Show developer information. - - Args: - repo_root: Repository root path. Defaults to auto-detected. - """ - if repo_root is None: - repo_root = get_repo_root() - - developer = get_developer(repo_root) - - if not developer: - print("Developer: (not initialized)") - else: - print(f"Developer: {developer}") - print(f"Workspace: {DIR_WORKFLOW}/{DIR_WORKSPACE}/{developer}/") - print(f"Tasks: {DIR_WORKFLOW}/{DIR_TASKS}/") - - -# ============================================================================= -# Main Entry (for testing) -# ============================================================================= - -if __name__ == "__main__": - show_developer_info() diff --git a/.trellis/scripts/common/git.py b/.trellis/scripts/common/git.py deleted file mode 100755 index c4bf29f5..00000000 --- a/.trellis/scripts/common/git.py +++ /dev/null @@ -1,31 +0,0 @@ -""" -Git command execution utility. - -Single source of truth for running git commands across all Trellis scripts. -""" - -from __future__ import annotations - -import subprocess -from pathlib import Path - - -def run_git(args: list[str], cwd: Path | None = None) -> tuple[int, str, str]: - """Run a git command and return (returncode, stdout, stderr). - - Uses UTF-8 encoding with -c i18n.logOutputEncoding=UTF-8 to ensure - consistent output across all platforms (Windows, macOS, Linux). - """ - try: - git_args = ["git", "-c", "i18n.logOutputEncoding=UTF-8"] + args - result = subprocess.run( - git_args, - cwd=cwd, - capture_output=True, - text=True, - encoding="utf-8", - errors="replace", - ) - return result.returncode, result.stdout, result.stderr - except Exception as e: - return 1, "", str(e) diff --git a/.trellis/scripts/common/git_context.py b/.trellis/scripts/common/git_context.py deleted file mode 100755 index 397c6d21..00000000 --- a/.trellis/scripts/common/git_context.py +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Git and Session Context utilities. - -Entry shim — delegates to session_context and packages_context. - -Provides: - output_json - Output context in JSON format - output_text - Output context in text format -""" - -from __future__ import annotations - -import json - -from .git import run_git -from .session_context import ( - get_context_json, - get_context_text, - get_context_record_json, - get_context_text_record, - output_json, - output_text, -) -from .packages_context import ( - get_context_packages_text, - get_context_packages_json, -) - -# Backward-compatible alias — external modules import this name -_run_git_command = run_git - - -# ============================================================================= -# Main Entry -# ============================================================================= - -def main() -> None: - """CLI entry point.""" - import argparse - - parser = argparse.ArgumentParser(description="Get Session Context for AI Agent") - parser.add_argument( - "--json", - "-j", - action="store_true", - help="Output in JSON format (works with any --mode)", - ) - parser.add_argument( - "--mode", - "-m", - choices=["default", "record", "packages"], - default="default", - help="Output mode: default (full context), record (for record-session), packages (package info only)", - ) - - args = parser.parse_args() - - if args.mode == "record": - if args.json: - print(json.dumps(get_context_record_json(), indent=2, ensure_ascii=False)) - else: - print(get_context_text_record()) - elif args.mode == "packages": - if args.json: - print(json.dumps(get_context_packages_json(), indent=2, ensure_ascii=False)) - else: - print(get_context_packages_text()) - else: - if args.json: - output_json() - else: - output_text() - - -if __name__ == "__main__": - main() diff --git a/.trellis/scripts/common/io.py b/.trellis/scripts/common/io.py deleted file mode 100755 index 44288f41..00000000 --- a/.trellis/scripts/common/io.py +++ /dev/null @@ -1,37 +0,0 @@ -""" -JSON file I/O utilities. - -Provides read_json and write_json as the single source of truth -for JSON file operations across all Trellis scripts. -""" - -from __future__ import annotations - -import json -from pathlib import Path - - -def read_json(path: Path) -> dict | None: - """Read and parse a JSON file. - - Returns None if the file doesn't exist, is invalid JSON, or can't be read. - """ - try: - return json.loads(path.read_text(encoding="utf-8")) - except (FileNotFoundError, json.JSONDecodeError, OSError): - return None - - -def write_json(path: Path, data: dict) -> bool: - """Write dict to JSON file with pretty formatting. - - Returns True on success, False on error. - """ - try: - path.write_text( - json.dumps(data, indent=2, ensure_ascii=False), - encoding="utf-8", - ) - return True - except (OSError, IOError): - return False diff --git a/.trellis/scripts/common/log.py b/.trellis/scripts/common/log.py deleted file mode 100755 index 839c643b..00000000 --- a/.trellis/scripts/common/log.py +++ /dev/null @@ -1,45 +0,0 @@ -""" -Terminal output utilities: colors and structured logging. - -Single source of truth for Colors and log_* functions -used across all Trellis scripts. -""" - -from __future__ import annotations - - -class Colors: - """ANSI color codes for terminal output.""" - - RED = "\033[0;31m" - GREEN = "\033[0;32m" - YELLOW = "\033[1;33m" - BLUE = "\033[0;34m" - CYAN = "\033[0;36m" - DIM = "\033[2m" - NC = "\033[0m" # No Color / Reset - - -def colored(text: str, color: str) -> str: - """Apply ANSI color to text.""" - return f"{color}{text}{Colors.NC}" - - -def log_info(msg: str) -> None: - """Print info-level message with [INFO] prefix.""" - print(f"{Colors.BLUE}[INFO]{Colors.NC} {msg}") - - -def log_success(msg: str) -> None: - """Print success message with [SUCCESS] prefix.""" - print(f"{Colors.GREEN}[SUCCESS]{Colors.NC} {msg}") - - -def log_warn(msg: str) -> None: - """Print warning message with [WARN] prefix.""" - print(f"{Colors.YELLOW}[WARN]{Colors.NC} {msg}") - - -def log_error(msg: str) -> None: - """Print error message with [ERROR] prefix.""" - print(f"{Colors.RED}[ERROR]{Colors.NC} {msg}") diff --git a/.trellis/scripts/common/packages_context.py b/.trellis/scripts/common/packages_context.py deleted file mode 100755 index e7d4e8c1..00000000 --- a/.trellis/scripts/common/packages_context.py +++ /dev/null @@ -1,238 +0,0 @@ -#!/usr/bin/env python3 -""" -Package discovery and context output. - -Provides: - get_packages_info - Get structured package info - get_packages_section - Build PACKAGES text section - get_context_packages_text - Full packages text output (--mode packages) - get_context_packages_json - Full packages JSON output (--mode packages --json) -""" - -from __future__ import annotations - -from pathlib import Path - -from .config import _is_true_config_value, get_default_package, get_packages, get_spec_scope -from .paths import ( - DIR_SPEC, - DIR_WORKFLOW, - get_current_task, - get_repo_root, -) -from .tasks import load_task - - -# ============================================================================= -# Internal Helpers -# ============================================================================= - -def _scan_spec_layers(spec_dir: Path, package: str | None = None) -> list[str]: - """Scan spec directory for available layers (subdirectories). - - For monorepo: scans spec/<package>/ - For single-repo: scans spec/ - """ - target = spec_dir / package if package else spec_dir - if not target.is_dir(): - return [] - return sorted( - d.name for d in target.iterdir() if d.is_dir() and d.name != "guides" - ) - - -def _get_active_task_package(repo_root: Path) -> str | None: - """Get the package field from the active task's task.json.""" - current = get_current_task(repo_root) - if not current: - return None - ct = load_task(repo_root / current) - return ct.package if ct and ct.package else None - - -def _resolve_scope_set( - packages: dict, - spec_scope, - task_pkg: str | None, - default_pkg: str | None, -) -> set | None: - """Resolve spec_scope to a set of allowed package names, or None for full scan.""" - if not packages: - return None - - if spec_scope is None: - return None - - if isinstance(spec_scope, str) and spec_scope == "active_task": - if task_pkg and task_pkg in packages: - return {task_pkg} - if default_pkg and default_pkg in packages: - return {default_pkg} - return None - - if isinstance(spec_scope, list): - valid = {e for e in spec_scope if e in packages} - if valid: - return valid - # All invalid: fallback - if task_pkg and task_pkg in packages: - return {task_pkg} - if default_pkg and default_pkg in packages: - return {default_pkg} - return None - - return None - - -# ============================================================================= -# Public Functions -# ============================================================================= - -def get_packages_info(repo_root: Path) -> list[dict]: - """Get structured package info for monorepo projects. - - Returns list of dicts with keys: name, path, type, default, specLayers, - isSubmodule, isGitRepo. - Returns empty list for single-repo projects. - """ - packages = get_packages(repo_root) - if not packages: - return [] - - default_pkg = get_default_package(repo_root) - spec_dir = repo_root / DIR_WORKFLOW / DIR_SPEC - result = [] - - for pkg_name, pkg_config in packages.items(): - pkg_path = pkg_config.get("path", pkg_name) if isinstance(pkg_config, dict) else str(pkg_config) - pkg_type = pkg_config.get("type", "local") if isinstance(pkg_config, dict) else "local" - pkg_git = pkg_config.get("git", False) if isinstance(pkg_config, dict) else False - layers = _scan_spec_layers(spec_dir, pkg_name) - - result.append({ - "name": pkg_name, - "path": pkg_path, - "type": pkg_type, - "default": pkg_name == default_pkg, - "specLayers": layers, - "isSubmodule": pkg_type == "submodule", - "isGitRepo": _is_true_config_value(pkg_git), - }) - - return result - - -def get_packages_section(repo_root: Path) -> str: - """Build the PACKAGES section for text output.""" - spec_dir = repo_root / DIR_WORKFLOW / DIR_SPEC - pkg_info = get_packages_info(repo_root) - - lines: list[str] = [] - lines.append("## PACKAGES") - - if not pkg_info: - lines.append("(single-repo mode)") - layers = _scan_spec_layers(spec_dir) - if layers: - lines.append(f"Spec layers: {', '.join(layers)}") - return "\n".join(lines) - - default_pkg = get_default_package(repo_root) - - for pkg in pkg_info: - layers_str = f" [{', '.join(pkg['specLayers'])}]" if pkg["specLayers"] else "" - submodule_tag = " (submodule)" if pkg["isSubmodule"] else "" - git_repo_tag = " (git repo)" if pkg["isGitRepo"] else "" - default_tag = " *" if pkg["default"] else "" - lines.append( - f"- {pkg['name']:<16} {pkg['path']:<20}{layers_str}{submodule_tag}{git_repo_tag}{default_tag}" - ) - - if default_pkg: - lines.append(f"Default package: {default_pkg}") - - return "\n".join(lines) - - -def get_context_packages_text(repo_root: Path | None = None) -> str: - """Get packages context as formatted text (for --mode packages).""" - if repo_root is None: - repo_root = get_repo_root() - - pkg_info = get_packages_info(repo_root) - lines: list[str] = [] - - if not pkg_info: - spec_dir = repo_root / DIR_WORKFLOW / DIR_SPEC - lines.append("Single-repo project (no packages configured)") - lines.append("") - layers = _scan_spec_layers(spec_dir) - if layers: - lines.append(f"Spec layers: {', '.join(layers)}") - return "\n".join(lines) - - # Resolve scope for annotations - packages_dict = get_packages(repo_root) or {} - default_pkg = get_default_package(repo_root) - spec_scope = get_spec_scope(repo_root) - task_pkg = _get_active_task_package(repo_root) - scope_set = _resolve_scope_set(packages_dict, spec_scope, task_pkg, default_pkg) - - lines.append("## PACKAGES") - lines.append("") - for pkg in pkg_info: - default_tag = " (default)" if pkg["default"] else "" - type_tag = f" [{pkg['type']}]" if pkg["type"] != "local" else "" - git_tag = " [git repo]" if pkg["isGitRepo"] else "" - - # Scope annotation - scope_tag = "" - if scope_set is not None and pkg["name"] not in scope_set: - scope_tag = " (out of scope)" - - lines.append(f"### {pkg['name']}{default_tag}{type_tag}{git_tag}{scope_tag}") - lines.append(f"Path: {pkg['path']}") - if pkg["specLayers"]: - lines.append(f"Spec layers: {', '.join(pkg['specLayers'])}") - for layer in pkg["specLayers"]: - lines.append(f" - .trellis/spec/{pkg['name']}/{layer}/index.md") - else: - lines.append("Spec: not configured") - lines.append("") - - # Also show shared guides - guides_dir = repo_root / DIR_WORKFLOW / DIR_SPEC / "guides" - if guides_dir.is_dir(): - lines.append("### Shared Guides (always included)") - lines.append("Path: .trellis/spec/guides/index.md") - lines.append("") - - return "\n".join(lines) - - -def get_context_packages_json(repo_root: Path | None = None) -> dict: - """Get packages context as a dictionary (for --mode packages --json).""" - if repo_root is None: - repo_root = get_repo_root() - - pkg_info = get_packages_info(repo_root) - - if not pkg_info: - spec_dir = repo_root / DIR_WORKFLOW / DIR_SPEC - layers = _scan_spec_layers(spec_dir) - return { - "mode": "single-repo", - "specLayers": layers, - } - - default_pkg = get_default_package(repo_root) - spec_scope = get_spec_scope(repo_root) - task_pkg = _get_active_task_package(repo_root) - - return { - "mode": "monorepo", - "packages": pkg_info, - "defaultPackage": default_pkg, - "specScope": spec_scope, - "activeTaskPackage": task_pkg, - } diff --git a/.trellis/scripts/common/paths.py b/.trellis/scripts/common/paths.py deleted file mode 100755 index 7a28a3da..00000000 --- a/.trellis/scripts/common/paths.py +++ /dev/null @@ -1,444 +0,0 @@ -#!/usr/bin/env python3 -""" -Common path utilities for Trellis workflow. - -Provides: - get_repo_root - Get repository root directory - get_developer - Get developer name - get_workspace_dir - Get developer workspace directory - get_tasks_dir - Get tasks directory - get_active_journal_file - Get current journal file -""" - -from __future__ import annotations - -import re -from datetime import datetime -from pathlib import Path - - -# ============================================================================= -# Path Constants (change here to rename directories) -# ============================================================================= - -# Directory names -DIR_WORKFLOW = ".trellis" -DIR_WORKSPACE = "workspace" -DIR_TASKS = "tasks" -DIR_ARCHIVE = "archive" -DIR_SPEC = "spec" -DIR_SCRIPTS = "scripts" - -# File names -FILE_DEVELOPER = ".developer" -FILE_CURRENT_TASK = ".current-task" -FILE_TASK_JSON = "task.json" -FILE_JOURNAL_PREFIX = "journal-" - - -# ============================================================================= -# Repository Root -# ============================================================================= - -def get_repo_root(start_path: Path | None = None) -> Path: - """Find the nearest directory containing .trellis/ folder. - - This handles nested git repos correctly (e.g., test project inside another repo). - - Args: - start_path: Starting directory to search from. Defaults to current directory. - - Returns: - Path to repository root, or current directory if no .trellis/ found. - """ - current = (start_path or Path.cwd()).resolve() - - while current != current.parent: - if (current / DIR_WORKFLOW).is_dir(): - return current - current = current.parent - - # Fallback to current directory if no .trellis/ found - return Path.cwd().resolve() - - -# ============================================================================= -# Developer -# ============================================================================= - -def get_developer(repo_root: Path | None = None) -> str | None: - """Get developer name from .developer file. - - Args: - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - Developer name or None if not initialized. - """ - if repo_root is None: - repo_root = get_repo_root() - - dev_file = repo_root / DIR_WORKFLOW / FILE_DEVELOPER - - if not dev_file.is_file(): - return None - - try: - content = dev_file.read_text(encoding="utf-8") - for line in content.splitlines(): - if line.startswith("name="): - return line.split("=", 1)[1].strip() - except (OSError, IOError): - pass - - return None - - -def check_developer(repo_root: Path | None = None) -> bool: - """Check if developer is initialized. - - Args: - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - True if developer is initialized. - """ - return get_developer(repo_root) is not None - - -# ============================================================================= -# Tasks Directory -# ============================================================================= - -def get_tasks_dir(repo_root: Path | None = None) -> Path: - """Get tasks directory path. - - Args: - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - Path to tasks directory. - """ - if repo_root is None: - repo_root = get_repo_root() - return repo_root / DIR_WORKFLOW / DIR_TASKS - - -# ============================================================================= -# Workspace Directory -# ============================================================================= - -def get_workspace_dir(repo_root: Path | None = None) -> Path | None: - """Get developer workspace directory. - - Args: - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - Path to workspace directory or None if developer not set. - """ - if repo_root is None: - repo_root = get_repo_root() - - developer = get_developer(repo_root) - if developer: - return repo_root / DIR_WORKFLOW / DIR_WORKSPACE / developer - return None - - -# ============================================================================= -# Journal File -# ============================================================================= - -def get_active_journal_file(repo_root: Path | None = None) -> Path | None: - """Get the current active journal file. - - Args: - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - Path to active journal file or None if not found. - """ - if repo_root is None: - repo_root = get_repo_root() - - workspace_dir = get_workspace_dir(repo_root) - if workspace_dir is None or not workspace_dir.is_dir(): - return None - - latest: Path | None = None - highest = 0 - - for f in workspace_dir.glob(f"{FILE_JOURNAL_PREFIX}*.md"): - if not f.is_file(): - continue - - # Extract number from filename - name = f.stem # e.g., "journal-1" - match = re.search(r"(\d+)$", name) - if match: - num = int(match.group(1)) - if num > highest: - highest = num - latest = f - - return latest - - -def count_lines(file_path: Path) -> int: - """Count lines in a file. - - Args: - file_path: Path to file. - - Returns: - Number of lines, or 0 if file doesn't exist. - """ - if not file_path.is_file(): - return 0 - - try: - return len(file_path.read_text(encoding="utf-8").splitlines()) - except (OSError, IOError): - return 0 - - -# ============================================================================= -# Current Task Management -# ============================================================================= - -def _get_current_task_file(repo_root: Path | None = None) -> Path: - """Get .current-task file path. - - Args: - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - Path to .current-task file. - """ - if repo_root is None: - repo_root = get_repo_root() - return repo_root / DIR_WORKFLOW / FILE_CURRENT_TASK - - -def normalize_task_ref(task_ref: str) -> str: - """Normalize a task ref for stable storage in .current-task. - - Stored refs should prefer repo-relative POSIX paths like - `.trellis/tasks/03-27-my-task`, even on Windows. Absolute paths are preserved - unless they can later be converted back to repo-relative form by callers. - """ - normalized = task_ref.strip() - if not normalized: - return "" - - path_obj = Path(normalized) - if path_obj.is_absolute(): - return str(path_obj) - - normalized = normalized.replace("\\", "/") - while normalized.startswith("./"): - normalized = normalized[2:] - - if normalized.startswith(f"{DIR_TASKS}/"): - return f"{DIR_WORKFLOW}/{normalized}" - - return normalized - - -def resolve_task_ref(task_ref: str, repo_root: Path | None = None) -> Path | None: - """Resolve a task ref from .current-task to an absolute task directory path.""" - if repo_root is None: - repo_root = get_repo_root() - - normalized = normalize_task_ref(task_ref) - if not normalized: - return None - - path_obj = Path(normalized) - if path_obj.is_absolute(): - return path_obj - - if normalized.startswith(f"{DIR_WORKFLOW}/"): - return repo_root / path_obj - - return repo_root / DIR_WORKFLOW / DIR_TASKS / path_obj - - -def get_current_task(repo_root: Path | None = None) -> str | None: - """Get current task directory path (relative to repo_root). - - Args: - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - Relative path to current task directory or None. - """ - current_file = _get_current_task_file(repo_root) - - if not current_file.is_file(): - return None - - try: - content = current_file.read_text(encoding="utf-8").strip() - return normalize_task_ref(content) if content else None - except (OSError, IOError): - return None - - -def get_current_task_abs(repo_root: Path | None = None) -> Path | None: - """Get current task directory absolute path. - - Args: - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - Absolute path to current task directory or None. - """ - if repo_root is None: - repo_root = get_repo_root() - - relative = get_current_task(repo_root) - if relative: - return resolve_task_ref(relative, repo_root) - return None - - -def set_current_task(task_path: str, repo_root: Path | None = None) -> bool: - """Set current task. - - Args: - task_path: Task directory path (relative to repo_root). - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - True on success, False on error. - """ - if repo_root is None: - repo_root = get_repo_root() - - normalized = normalize_task_ref(task_path) - if not normalized: - return False - - # Verify task directory exists - full_path = resolve_task_ref(normalized, repo_root) - if full_path is None or not full_path.is_dir(): - return False - - try: - normalized = full_path.relative_to(repo_root).as_posix() - except ValueError: - normalized = str(full_path) - - current_file = _get_current_task_file(repo_root) - - try: - current_file.write_text(normalized, encoding="utf-8") - return True - except (OSError, IOError): - return False - - -def clear_current_task(repo_root: Path | None = None) -> bool: - """Clear current task. - - Args: - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - True on success. - """ - current_file = _get_current_task_file(repo_root) - - try: - if current_file.is_file(): - current_file.unlink() - return True - except (OSError, IOError): - return False - - -def has_current_task(repo_root: Path | None = None) -> bool: - """Check if has current task. - - Args: - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - True if current task is set. - """ - return get_current_task(repo_root) is not None - - -# ============================================================================= -# Task ID Generation -# ============================================================================= - -def generate_task_date_prefix() -> str: - """Generate task ID based on date (MM-DD format). - - Returns: - Date prefix string (e.g., "01-21"). - """ - return datetime.now().strftime("%m-%d") - - -# ============================================================================= -# Monorepo / Package Paths -# ============================================================================= - - -def get_spec_dir(package: str | None = None, repo_root: Path | None = None) -> Path: - """Get the spec directory path. - - Single-repo: .trellis/spec - Monorepo with package: .trellis/spec/<package> - - Uses lazy import to avoid circular dependency with config.py. - """ - if repo_root is None: - repo_root = get_repo_root() - - from .config import get_spec_base - - base = get_spec_base(package, repo_root) - return repo_root / DIR_WORKFLOW / base - - -def get_package_path(package: str, repo_root: Path | None = None) -> Path | None: - """Get a package's source directory absolute path from config. - - Returns: - Absolute path to the package directory, or None if not found. - """ - if repo_root is None: - repo_root = get_repo_root() - - from .config import get_packages - - packages = get_packages(repo_root) - if not packages or package not in packages: - return None - - info = packages[package] - if isinstance(info, dict): - rel_path = info.get("path", package) - else: - rel_path = str(info) - - return repo_root / rel_path - - -# ============================================================================= -# Main Entry (for testing) -# ============================================================================= - -if __name__ == "__main__": - repo = get_repo_root() - print(f"Repository root: {repo}") - print(f"Developer: {get_developer(repo)}") - print(f"Tasks dir: {get_tasks_dir(repo)}") - print(f"Workspace dir: {get_workspace_dir(repo)}") - print(f"Journal file: {get_active_journal_file(repo)}") - print(f"Current task: {get_current_task(repo)}") diff --git a/.trellis/scripts/common/phase.py b/.trellis/scripts/common/phase.py deleted file mode 100755 index cf7670e1..00000000 --- a/.trellis/scripts/common/phase.py +++ /dev/null @@ -1,254 +0,0 @@ -#!/usr/bin/env python3 -""" -Phase Management Utilities. - -Centralized phase tracking for multi-agent pipeline. - -Provides: - get_current_phase - Returns current phase number - get_total_phases - Returns total phase count - get_phase_action - Returns action name for phase - get_phase_info - Returns "N/M (action)" format - set_phase - Sets current_phase - advance_phase - Advances to next phase - get_phase_for_action - Returns phase number for action - map_subagent_to_action - Map subagent type to action name - is_phase_completed - Check if phase is completed - is_current_action - Check if at specific action -""" - -from __future__ import annotations - -from pathlib import Path - -from .io import read_json, write_json - - -# ============================================================================= -# Internal Helpers (operate on pre-loaded data dict) -# ============================================================================= - -def _total_phases(data: dict) -> int: - """Get total phases from pre-loaded data.""" - next_action = data.get("next_action", []) - return len(next_action) if isinstance(next_action, list) else 0 - - -def _phase_action(data: dict, phase: int) -> str: - """Get action name for a phase from pre-loaded data.""" - next_action = data.get("next_action", []) - if isinstance(next_action, list): - for item in next_action: - if isinstance(item, dict) and item.get("phase") == phase: - return item.get("action", "unknown") - return "unknown" - - -def _phase_for_action(data: dict, action: str) -> int: - """Get phase number for an action name from pre-loaded data.""" - next_action = data.get("next_action", []) - if isinstance(next_action, list): - for item in next_action: - if isinstance(item, dict) and item.get("action") == action: - return item.get("phase", 0) - return 0 - - -# ============================================================================= -# Phase Functions -# ============================================================================= - -def get_current_phase(task_json: Path) -> int: - """Get current phase number. - - Args: - task_json: Path to task.json file. - - Returns: - Current phase number, or 0 if not found. - """ - data = read_json(task_json) - if not data: - return 0 - return data.get("current_phase", 0) or 0 - - -def get_total_phases(task_json: Path) -> int: - """Get total number of phases. - - Args: - task_json: Path to task.json file. - - Returns: - Total phase count, or 0 if not found. - """ - data = read_json(task_json) - if not data: - return 0 - return _total_phases(data) - - -def get_phase_action(task_json: Path, phase: int) -> str: - """Get action name for a specific phase. - - Args: - task_json: Path to task.json file. - phase: Phase number. - - Returns: - Action name, or "unknown" if not found. - """ - data = read_json(task_json) - if not data: - return "unknown" - return _phase_action(data, phase) - - -def get_phase_info(task_json: Path) -> str: - """Get formatted phase info: "N/M (action)". - - Args: - task_json: Path to task.json file. - - Returns: - Formatted string like "1/4 (implement)". - """ - data = read_json(task_json) - if not data: - return "N/A" - - current_phase = data.get("current_phase", 0) or 0 - total = _total_phases(data) - action_name = _phase_action(data, current_phase) - - if current_phase == 0 or current_phase is None: - return f"0/{total} (pending)" - else: - return f"{current_phase}/{total} ({action_name})" - - -def set_phase(task_json: Path, phase: int) -> bool: - """Set current phase to a specific value. - - Args: - task_json: Path to task.json file. - phase: Phase number to set. - - Returns: - True on success, False on error. - """ - data = read_json(task_json) - if not data: - return False - - data["current_phase"] = phase - return write_json(task_json, data) - - -def advance_phase(task_json: Path) -> bool: - """Advance to next phase. - - Args: - task_json: Path to task.json file. - - Returns: - True on success, False on error or at final phase. - """ - data = read_json(task_json) - if not data: - return False - - current = data.get("current_phase", 0) or 0 - total = _total_phases(data) - next_phase = current + 1 - - if next_phase > total: - return False # Already at final phase - - data["current_phase"] = next_phase - return write_json(task_json, data) - - -def get_phase_for_action(task_json: Path, action: str) -> int: - """Get phase number for a specific action name. - - Args: - task_json: Path to task.json file. - action: Action name. - - Returns: - Phase number, or 0 if not found. - """ - data = read_json(task_json) - if not data: - return 0 - return _phase_for_action(data, action) - - -def map_subagent_to_action(subagent_type: str) -> str: - """Map subagent type to action name. - - Used by hooks to determine which action a subagent corresponds to. - - Args: - subagent_type: Subagent type string. - - Returns: - Corresponding action name. - """ - mapping = { - "implement": "implement", - "check": "check", - "debug": "debug", - "research": "research", - } - return mapping.get(subagent_type, subagent_type) - - -def is_phase_completed(task_json: Path, phase: int) -> bool: - """Check if a phase is completed (current_phase > phase). - - Args: - task_json: Path to task.json file. - phase: Phase number to check. - - Returns: - True if phase is completed. - """ - current = get_current_phase(task_json) - return current > phase - - -def is_current_action(task_json: Path, action: str) -> bool: - """Check if we're at a specific action. - - Args: - task_json: Path to task.json file. - action: Action name to check. - - Returns: - True if current phase matches the action. - """ - data = read_json(task_json) - if not data: - return False - current = data.get("current_phase", 0) or 0 - action_phase = _phase_for_action(data, action) - return current == action_phase - - -# ============================================================================= -# Main Entry (for testing) -# ============================================================================= - -if __name__ == "__main__": - import sys - - if len(sys.argv) > 1: - path = Path(sys.argv[1]) - print(f"Task JSON: {path}") - print(f"Phase info: {get_phase_info(path)}") - print(f"Current phase: {get_current_phase(path)}") - print(f"Total phases: {get_total_phases(path)}") - else: - print("Usage: python3 phase.py <task.json>") diff --git a/.trellis/scripts/common/registry.py b/.trellis/scripts/common/registry.py deleted file mode 100755 index 73e523d9..00000000 --- a/.trellis/scripts/common/registry.py +++ /dev/null @@ -1,335 +0,0 @@ -#!/usr/bin/env python3 -""" -Registry utility functions for multi-agent pipeline. - -Provides: - registry_get_file - Get registry file path - registry_get_agent_by_id - Find agent by ID - registry_get_agent_by_worktree - Find agent by worktree path - registry_get_task_dir - Get task dir for a worktree - registry_remove_by_id - Remove agent by ID - registry_remove_by_worktree - Remove agent by worktree path - registry_add_agent - Add agent to registry - registry_search_agent - Search agent by ID or task_dir - registry_list_agents - List all agents -""" - -from __future__ import annotations - -from datetime import datetime -from pathlib import Path - -from .io import read_json, write_json -from .paths import get_repo_root -from .worktree import get_agents_dir - - -# ============================================================================= -# Internal Helpers -# ============================================================================= - -def _load_registry( - repo_root: Path | None = None, -) -> tuple[Path | None, dict | None]: - """Load registry file and data in one step. - - Returns: - (registry_file_path, data_dict) — either may be None. - """ - if repo_root is None: - repo_root = get_repo_root() - - registry_file = registry_get_file(repo_root) - if not registry_file or not registry_file.is_file(): - return registry_file, None - - data = read_json(registry_file) - return registry_file, data - - -# ============================================================================= -# Registry File Access -# ============================================================================= - -def registry_get_file(repo_root: Path | None = None) -> Path | None: - """Get registry file path. - - Args: - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - Path to registry.json, or None if agents dir not found. - """ - if repo_root is None: - repo_root = get_repo_root() - - agents_dir = get_agents_dir(repo_root) - if agents_dir: - return agents_dir / "registry.json" - return None - - -def _ensure_registry(repo_root: Path | None = None) -> Path | None: - """Ensure registry file exists with valid structure. - - Args: - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - Path to registry file, or None if cannot create. - """ - if repo_root is None: - repo_root = get_repo_root() - - registry_file = registry_get_file(repo_root) - if not registry_file: - return None - - agents_dir = registry_file.parent - - try: - agents_dir.mkdir(parents=True, exist_ok=True) - - if not registry_file.exists(): - write_json(registry_file, {"agents": []}) - - return registry_file - except (OSError, IOError): - return None - - -# ============================================================================= -# Agent Lookup -# ============================================================================= - -def registry_get_agent_by_id( - agent_id: str, - repo_root: Path | None = None -) -> dict | None: - """Get agent by ID. - - Args: - agent_id: Agent ID. - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - Agent dict, or None if not found. - """ - _, data = _load_registry(repo_root) - if not data: - return None - - for agent in data.get("agents", []): - if agent.get("id") == agent_id: - return agent - - return None - - -def registry_get_agent_by_worktree( - worktree_path: str, - repo_root: Path | None = None -) -> dict | None: - """Get agent by worktree path. - - Args: - worktree_path: Worktree path. - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - Agent dict, or None if not found. - """ - _, data = _load_registry(repo_root) - if not data: - return None - - for agent in data.get("agents", []): - if agent.get("worktree_path") == worktree_path: - return agent - - return None - - -def registry_search_agent( - search: str, - repo_root: Path | None = None -) -> dict | None: - """Search agent by ID or task_dir containing search term. - - Args: - search: Search term. - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - First matching agent dict, or None if not found. - """ - _, data = _load_registry(repo_root) - if not data: - return None - - for agent in data.get("agents", []): - # Exact ID match - if agent.get("id") == search: - return agent - # Partial match on task_dir - task_dir = agent.get("task_dir", "") - if search in task_dir: - return agent - - return None - - -def registry_get_task_dir( - worktree_path: str, - repo_root: Path | None = None -) -> str | None: - """Get task directory for a worktree. - - Args: - worktree_path: Worktree path. - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - Task directory path, or None if not found. - """ - _, data = _load_registry(repo_root) - if not data: - return None - - for agent in data.get("agents", []): - if agent.get("worktree_path") == worktree_path: - return agent.get("task_dir") - - return None - - -# ============================================================================= -# Agent Modification -# ============================================================================= - -def registry_remove_by_id(agent_id: str, repo_root: Path | None = None) -> bool: - """Remove agent by ID. - - Args: - agent_id: Agent ID. - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - True on success. - """ - registry_file, data = _load_registry(repo_root) - if not registry_file or not data: - return True # Nothing to remove - - agents = data.get("agents", []) - data["agents"] = [a for a in agents if a.get("id") != agent_id] - - return write_json(registry_file, data) - - -def registry_remove_by_worktree( - worktree_path: str, - repo_root: Path | None = None -) -> bool: - """Remove agent by worktree path. - - Args: - worktree_path: Worktree path. - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - True on success. - """ - registry_file, data = _load_registry(repo_root) - if not registry_file or not data: - return True # Nothing to remove - - agents = data.get("agents", []) - data["agents"] = [a for a in agents if a.get("worktree_path") != worktree_path] - - return write_json(registry_file, data) - - -def registry_add_agent( - agent_id: str, - worktree_path: str, - pid: int, - task_dir: str, - repo_root: Path | None = None, - platform: str = "claude", -) -> bool: - """Add agent to registry (replaces if same ID exists). - - Args: - agent_id: Agent ID. - worktree_path: Worktree path. - pid: Process ID. - task_dir: Task directory path. - repo_root: Repository root path. Defaults to auto-detected. - platform: Platform used (e.g., 'claude', 'opencode', 'codex', 'kiro', 'antigravity'). Defaults to 'claude'. - - Returns: - True on success. - """ - if repo_root is None: - repo_root = get_repo_root() - - registry_file = _ensure_registry(repo_root) - if not registry_file: - return False - - data = read_json(registry_file) - if not data: - data = {"agents": []} - - # Remove existing agent with same ID - agents = data.get("agents", []) - agents = [a for a in agents if a.get("id") != agent_id] - - # Create new agent record - started_at = datetime.now().isoformat() - new_agent = { - "id": agent_id, - "worktree_path": worktree_path, - "pid": pid, - "started_at": started_at, - "task_dir": task_dir, - "platform": platform, - } - - agents.append(new_agent) - data["agents"] = agents - - return write_json(registry_file, data) - - -def registry_list_agents(repo_root: Path | None = None) -> list[dict]: - """List all agents. - - Args: - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - List of agent dicts. - """ - _, data = _load_registry(repo_root) - if not data: - return [] - - return data.get("agents", []) - - -# ============================================================================= -# Main Entry (for testing) -# ============================================================================= - -if __name__ == "__main__": - import json as json_mod - - repo = get_repo_root() - print(f"Repository root: {repo}") - print(f"Registry file: {registry_get_file(repo)}") - print() - print("Agents:") - agents = registry_list_agents(repo) - print(json_mod.dumps(agents, indent=2)) diff --git a/.trellis/scripts/common/session_context.py b/.trellis/scripts/common/session_context.py deleted file mode 100755 index 52c6a4a3..00000000 --- a/.trellis/scripts/common/session_context.py +++ /dev/null @@ -1,562 +0,0 @@ -#!/usr/bin/env python3 -""" -Session context generation (default + record modes). - -Provides: - get_context_json - JSON output for default mode - get_context_text - Text output for default mode - get_context_record_json - JSON for record mode - get_context_text_record - Text for record mode - output_json - Print JSON - output_text - Print text -""" - -from __future__ import annotations - -import json -from pathlib import Path - -from .config import get_git_packages -from .git import run_git -from .packages_context import get_packages_section -from .tasks import iter_active_tasks, load_task, get_all_statuses, children_progress -from .paths import ( - DIR_SCRIPTS, - DIR_SPEC, - DIR_TASKS, - DIR_WORKFLOW, - DIR_WORKSPACE, - count_lines, - get_active_journal_file, - get_current_task, - get_developer, - get_repo_root, - get_tasks_dir, -) - - -# ============================================================================= -# Helpers -# ============================================================================= - -def _collect_package_git_info(repo_root: Path) -> list[dict]: - """Collect git status and recent commits for packages with independent git repos. - - Only packages marked with ``git: true`` in config.yaml are included. - - Returns: - List of dicts with keys: name, path, branch, isClean, - uncommittedChanges, recentCommits. - Empty list if no git-repo packages are configured. - """ - git_pkgs = get_git_packages(repo_root) - if not git_pkgs: - return [] - - result = [] - for pkg_name, pkg_path in git_pkgs.items(): - pkg_dir = repo_root / pkg_path - if not (pkg_dir / ".git").exists(): - continue - - _, branch_out, _ = run_git(["branch", "--show-current"], cwd=pkg_dir) - branch = branch_out.strip() or "unknown" - - _, status_out, _ = run_git(["status", "--porcelain"], cwd=pkg_dir) - changes = len([l for l in status_out.splitlines() if l.strip()]) - - _, log_out, _ = run_git(["log", "--oneline", "-5"], cwd=pkg_dir) - commits = [] - for line in log_out.splitlines(): - if line.strip(): - parts = line.split(" ", 1) - if len(parts) >= 2: - commits.append({"hash": parts[0], "message": parts[1]}) - elif len(parts) == 1: - commits.append({"hash": parts[0], "message": ""}) - - result.append({ - "name": pkg_name, - "path": pkg_path, - "branch": branch, - "isClean": changes == 0, - "uncommittedChanges": changes, - "recentCommits": commits, - }) - - return result - - -def _append_package_git_context(lines: list[str], package_git_info: list[dict]) -> None: - """Append Git status and recent commits for package repositories.""" - for pkg in package_git_info: - lines.append(f"## GIT STATUS ({pkg['name']}: {pkg['path']})") - lines.append(f"Branch: {pkg['branch']}") - if pkg["isClean"]: - lines.append("Working directory: Clean") - else: - lines.append( - f"Working directory: {pkg['uncommittedChanges']} uncommitted change(s)" - ) - lines.append("") - lines.append(f"## RECENT COMMITS ({pkg['name']}: {pkg['path']})") - if pkg["recentCommits"]: - for commit in pkg["recentCommits"]: - lines.append(f"{commit['hash']} {commit['message']}") - else: - lines.append("(no commits)") - lines.append("") - - -# ============================================================================= -# JSON Output -# ============================================================================= - -def get_context_json(repo_root: Path | None = None) -> dict: - """Get context as a dictionary. - - Args: - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - Context dictionary. - """ - if repo_root is None: - repo_root = get_repo_root() - - developer = get_developer(repo_root) - tasks_dir = get_tasks_dir(repo_root) - journal_file = get_active_journal_file(repo_root) - - journal_lines = 0 - journal_relative = "" - if journal_file and developer: - journal_lines = count_lines(journal_file) - journal_relative = ( - f"{DIR_WORKFLOW}/{DIR_WORKSPACE}/{developer}/{journal_file.name}" - ) - - # Git info - _, branch_out, _ = run_git(["branch", "--show-current"], cwd=repo_root) - branch = branch_out.strip() or "unknown" - - _, status_out, _ = run_git(["status", "--porcelain"], cwd=repo_root) - git_status_count = len([line for line in status_out.splitlines() if line.strip()]) - is_clean = git_status_count == 0 - - # Recent commits - _, log_out, _ = run_git(["log", "--oneline", "-5"], cwd=repo_root) - commits = [] - for line in log_out.splitlines(): - if line.strip(): - parts = line.split(" ", 1) - if len(parts) >= 2: - commits.append({"hash": parts[0], "message": parts[1]}) - elif len(parts) == 1: - commits.append({"hash": parts[0], "message": ""}) - - # Tasks - tasks = [ - { - "dir": t.dir_name, - "name": t.name, - "status": t.status, - "children": list(t.children), - "parent": t.parent, - } - for t in iter_active_tasks(tasks_dir) - ] - - # Package git repos (independent sub-repositories) - pkg_git_info = _collect_package_git_info(repo_root) - - result = { - "developer": developer or "", - "git": { - "branch": branch, - "isClean": is_clean, - "uncommittedChanges": git_status_count, - "recentCommits": commits, - }, - "tasks": { - "active": tasks, - "directory": f"{DIR_WORKFLOW}/{DIR_TASKS}", - }, - "journal": { - "file": journal_relative, - "lines": journal_lines, - "nearLimit": journal_lines > 1800, - }, - } - - if pkg_git_info: - result["packageGit"] = pkg_git_info - - return result - - -def output_json(repo_root: Path | None = None) -> None: - """Output context in JSON format. - - Args: - repo_root: Repository root path. Defaults to auto-detected. - """ - context = get_context_json(repo_root) - print(json.dumps(context, indent=2, ensure_ascii=False)) - - -# ============================================================================= -# Text Output -# ============================================================================= - -def get_context_text(repo_root: Path | None = None) -> str: - """Get context as formatted text. - - Args: - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - Formatted text output. - """ - if repo_root is None: - repo_root = get_repo_root() - - lines = [] - lines.append("========================================") - lines.append("SESSION CONTEXT") - lines.append("========================================") - lines.append("") - - developer = get_developer(repo_root) - - # Developer section - lines.append("## DEVELOPER") - if not developer: - lines.append( - f"ERROR: Not initialized. Run: python3 ./{DIR_WORKFLOW}/{DIR_SCRIPTS}/init_developer.py <name>" - ) - return "\n".join(lines) - - lines.append(f"Name: {developer}") - lines.append("") - - # Git status - lines.append("## GIT STATUS") - _, branch_out, _ = run_git(["branch", "--show-current"], cwd=repo_root) - branch = branch_out.strip() or "unknown" - lines.append(f"Branch: {branch}") - - _, status_out, _ = run_git(["status", "--porcelain"], cwd=repo_root) - status_lines = [line for line in status_out.splitlines() if line.strip()] - status_count = len(status_lines) - - if status_count == 0: - lines.append("Working directory: Clean") - else: - lines.append(f"Working directory: {status_count} uncommitted change(s)") - lines.append("") - lines.append("Changes:") - _, short_out, _ = run_git(["status", "--short"], cwd=repo_root) - for line in short_out.splitlines()[:10]: - lines.append(line) - lines.append("") - - # Recent commits - lines.append("## RECENT COMMITS") - _, log_out, _ = run_git(["log", "--oneline", "-5"], cwd=repo_root) - if log_out.strip(): - for line in log_out.splitlines(): - lines.append(line) - else: - lines.append("(no commits)") - lines.append("") - - # Package git repos — independent sub-repositories - _append_package_git_context(lines, _collect_package_git_info(repo_root)) - - # Current task - lines.append("## CURRENT TASK") - current_task = get_current_task(repo_root) - if current_task: - current_task_dir = repo_root / current_task - lines.append(f"Path: {current_task}") - - ct = load_task(current_task_dir) - if ct: - lines.append(f"Name: {ct.name}") - lines.append(f"Status: {ct.status}") - lines.append(f"Created: {ct.raw.get('createdAt', 'unknown')}") - if ct.description: - lines.append(f"Description: {ct.description}") - - # Check for prd.md - prd_file = current_task_dir / "prd.md" - if prd_file.is_file(): - lines.append("") - lines.append("[!] This task has prd.md - read it for task details") - else: - lines.append("(none)") - lines.append("") - - # Active tasks - lines.append("## ACTIVE TASKS") - tasks_dir = get_tasks_dir(repo_root) - task_count = 0 - - # Collect all task data for hierarchy display - all_tasks = {t.dir_name: t for t in iter_active_tasks(tasks_dir)} - all_statuses = {name: t.status for name, t in all_tasks.items()} - - def _print_task_tree(name: str, indent: int = 0) -> None: - nonlocal task_count - t = all_tasks[name] - progress = children_progress(t.children, all_statuses) - prefix = " " * indent - lines.append(f"{prefix}- {name}/ ({t.status}){progress} @{t.assignee or '-'}") - task_count += 1 - for child in t.children: - if child in all_tasks: - _print_task_tree(child, indent + 1) - - for dir_name in sorted(all_tasks.keys()): - if not all_tasks[dir_name].parent: - _print_task_tree(dir_name) - - if task_count == 0: - lines.append("(no active tasks)") - lines.append(f"Total: {task_count} active task(s)") - lines.append("") - - # My tasks - lines.append("## MY TASKS (Assigned to me)") - my_task_count = 0 - - for t in all_tasks.values(): - if t.assignee == developer and t.status != "done": - progress = children_progress(t.children, all_statuses) - lines.append(f"- [{t.priority}] {t.title} ({t.status}){progress}") - my_task_count += 1 - - if my_task_count == 0: - lines.append("(no tasks assigned to you)") - lines.append("") - - # Journal file - lines.append("## JOURNAL FILE") - journal_file = get_active_journal_file(repo_root) - if journal_file: - journal_lines = count_lines(journal_file) - relative = f"{DIR_WORKFLOW}/{DIR_WORKSPACE}/{developer}/{journal_file.name}" - lines.append(f"Active file: {relative}") - lines.append(f"Line count: {journal_lines} / 2000") - if journal_lines > 1800: - lines.append("[!] WARNING: Approaching 2000 line limit!") - else: - lines.append("No journal file found") - lines.append("") - - # Packages - packages_text = get_packages_section(repo_root) - if packages_text: - lines.append(packages_text) - lines.append("") - - # Paths - lines.append("## PATHS") - lines.append(f"Workspace: {DIR_WORKFLOW}/{DIR_WORKSPACE}/{developer}/") - lines.append(f"Tasks: {DIR_WORKFLOW}/{DIR_TASKS}/") - lines.append(f"Spec: {DIR_WORKFLOW}/{DIR_SPEC}/") - lines.append("") - - lines.append("========================================") - - return "\n".join(lines) - - -# ============================================================================= -# Record Mode -# ============================================================================= - -def get_context_record_json(repo_root: Path | None = None) -> dict: - """Get record-mode context as a dictionary. - - Focused on: my active tasks, git status, current task. - """ - if repo_root is None: - repo_root = get_repo_root() - - developer = get_developer(repo_root) - tasks_dir = get_tasks_dir(repo_root) - - # Git info - _, branch_out, _ = run_git(["branch", "--show-current"], cwd=repo_root) - branch = branch_out.strip() or "unknown" - - _, status_out, _ = run_git(["status", "--porcelain"], cwd=repo_root) - git_status_count = len([line for line in status_out.splitlines() if line.strip()]) - - _, log_out, _ = run_git(["log", "--oneline", "-5"], cwd=repo_root) - commits = [] - for line in log_out.splitlines(): - if line.strip(): - parts = line.split(" ", 1) - if len(parts) >= 2: - commits.append({"hash": parts[0], "message": parts[1]}) - - # My tasks (single pass — collect statuses and filter by assignee) - all_tasks_list = list(iter_active_tasks(tasks_dir)) - all_statuses = {t.dir_name: t.status for t in all_tasks_list} - - my_tasks = [] - for t in all_tasks_list: - if t.assignee == developer: - done = sum( - 1 for c in t.children - if all_statuses.get(c) in ("completed", "done") - ) - my_tasks.append({ - "dir": t.dir_name, - "title": t.title, - "status": t.status, - "priority": t.priority, - "children": list(t.children), - "childrenDone": done, - "parent": t.parent, - "meta": t.meta, - }) - - # Current task - current_task_info = None - current_task = get_current_task(repo_root) - if current_task: - ct = load_task(repo_root / current_task) - if ct: - current_task_info = { - "path": current_task, - "name": ct.name, - "status": ct.status, - } - - # Package git repos - pkg_git_info = _collect_package_git_info(repo_root) - - result = { - "developer": developer or "", - "git": { - "branch": branch, - "isClean": git_status_count == 0, - "uncommittedChanges": git_status_count, - "recentCommits": commits, - }, - "myTasks": my_tasks, - "currentTask": current_task_info, - } - - if pkg_git_info: - result["packageGit"] = pkg_git_info - - return result - - -def get_context_text_record(repo_root: Path | None = None) -> str: - """Get context as formatted text for record-session mode. - - Focused output: MY ACTIVE TASKS first (with [!!!] emphasis), - then GIT STATUS, RECENT COMMITS, CURRENT TASK. - """ - if repo_root is None: - repo_root = get_repo_root() - - lines: list[str] = [] - lines.append("========================================") - lines.append("SESSION CONTEXT (RECORD MODE)") - lines.append("========================================") - lines.append("") - - developer = get_developer(repo_root) - if not developer: - lines.append( - f"ERROR: Not initialized. Run: python3 ./{DIR_WORKFLOW}/{DIR_SCRIPTS}/init_developer.py <name>" - ) - return "\n".join(lines) - - # MY ACTIVE TASKS — first and prominent - lines.append(f"## [!!!] MY ACTIVE TASKS (Assigned to {developer})") - lines.append("[!] Review whether any should be archived before recording this session.") - lines.append("") - - tasks_dir = get_tasks_dir(repo_root) - my_task_count = 0 - - # Single pass — collect all tasks and filter by assignee - all_statuses = get_all_statuses(tasks_dir) - - for t in iter_active_tasks(tasks_dir): - if t.assignee == developer: - progress = children_progress(t.children, all_statuses) - lines.append(f"- [{t.priority}] {t.title} ({t.status}){progress} — {t.dir_name}") - my_task_count += 1 - - if my_task_count == 0: - lines.append("(no active tasks assigned to you)") - lines.append("") - - # GIT STATUS - lines.append("## GIT STATUS") - _, branch_out, _ = run_git(["branch", "--show-current"], cwd=repo_root) - branch = branch_out.strip() or "unknown" - lines.append(f"Branch: {branch}") - - _, status_out, _ = run_git(["status", "--porcelain"], cwd=repo_root) - status_lines = [line for line in status_out.splitlines() if line.strip()] - status_count = len(status_lines) - - if status_count == 0: - lines.append("Working directory: Clean") - else: - lines.append(f"Working directory: {status_count} uncommitted change(s)") - lines.append("") - lines.append("Changes:") - _, short_out, _ = run_git(["status", "--short"], cwd=repo_root) - for line in short_out.splitlines()[:10]: - lines.append(line) - lines.append("") - - # RECENT COMMITS - lines.append("## RECENT COMMITS") - _, log_out, _ = run_git(["log", "--oneline", "-5"], cwd=repo_root) - if log_out.strip(): - for line in log_out.splitlines(): - lines.append(line) - else: - lines.append("(no commits)") - lines.append("") - - # Package git repos — independent sub-repositories - _append_package_git_context(lines, _collect_package_git_info(repo_root)) - - # CURRENT TASK - lines.append("## CURRENT TASK") - current_task = get_current_task(repo_root) - if current_task: - lines.append(f"Path: {current_task}") - ct = load_task(repo_root / current_task) - if ct: - lines.append(f"Name: {ct.name}") - lines.append(f"Status: {ct.status}") - else: - lines.append("(none)") - lines.append("") - - lines.append("========================================") - - return "\n".join(lines) - - -def output_text(repo_root: Path | None = None) -> None: - """Output context in text format. - - Args: - repo_root: Repository root path. Defaults to auto-detected. - """ - print(get_context_text(repo_root)) diff --git a/.trellis/scripts/common/task_context.py b/.trellis/scripts/common/task_context.py deleted file mode 100755 index 283c139c..00000000 --- a/.trellis/scripts/common/task_context.py +++ /dev/null @@ -1,410 +0,0 @@ -#!/usr/bin/env python3 -""" -Task JSONL context management. - -Provides: - cmd_init_context - Initialize JSONL context files for a task - cmd_add_context - Add entry to JSONL context file - cmd_validate - Validate JSONL context files - cmd_list_context - List JSONL context entries -""" - -from __future__ import annotations - -import argparse -import json -import sys -from pathlib import Path - -from .cli_adapter import get_cli_adapter_auto -from .config import ( - get_packages, - is_monorepo, - resolve_package, - validate_package, -) -from .io import read_json, write_json -from .log import Colors, colored -from .paths import ( - DIR_SPEC, - DIR_WORKFLOW, - FILE_TASK_JSON, - get_repo_root, -) -from .task_utils import resolve_task_dir - - -# ============================================================================= -# JSONL Default Content Generators -# ============================================================================= - -def get_implement_base() -> list[dict]: - """Get base implement context entries.""" - return [ - {"file": f"{DIR_WORKFLOW}/workflow.md", "reason": "Project workflow and conventions"}, - ] - - -def get_implement_backend(package: str | None = None) -> list[dict]: - """Get backend implement context entries.""" - spec_base = f"{DIR_SPEC}/{package}" if package else DIR_SPEC - return [ - {"file": f"{DIR_WORKFLOW}/{spec_base}/backend/index.md", "reason": "Backend development guide"}, - ] - - -def get_implement_frontend(package: str | None = None) -> list[dict]: - """Get frontend implement context entries.""" - spec_base = f"{DIR_SPEC}/{package}" if package else DIR_SPEC - return [ - {"file": f"{DIR_WORKFLOW}/{spec_base}/frontend/index.md", "reason": "Frontend development guide"}, - ] - - -def get_check_context(repo_root: Path) -> list[dict]: - """Get check context entries.""" - adapter = get_cli_adapter_auto(repo_root) - - entries = [ - {"file": adapter.get_trellis_command_path("finish-work"), "reason": "Finish work checklist"}, - {"file": adapter.get_trellis_command_path("check"), "reason": "Code quality check spec"}, - ] - - return entries - - -def get_debug_context(repo_root: Path) -> list[dict]: - """Get debug context entries.""" - adapter = get_cli_adapter_auto(repo_root) - - entries: list[dict] = [ - {"file": adapter.get_trellis_command_path("check"), "reason": "Code quality check spec"}, - ] - - return entries - - -def _write_jsonl(path: Path, entries: list[dict]) -> None: - """Write entries to JSONL file.""" - lines = [json.dumps(entry, ensure_ascii=False) for entry in entries] - path.write_text("\n".join(lines) + "\n", encoding="utf-8") - - -# ============================================================================= -# Command: init-context -# ============================================================================= - -def cmd_init_context(args: argparse.Namespace) -> int: - """Initialize JSONL context files for a task.""" - repo_root = get_repo_root() - target_dir = resolve_task_dir(args.dir, repo_root) - dev_type = args.type - - if not dev_type: - print(colored("Error: Missing arguments", Colors.RED)) - print("Usage: python3 task.py init-context <task-dir> <dev_type>") - print(" dev_type: backend | frontend | fullstack | test | docs") - return 1 - - if not target_dir.is_dir(): - print(colored(f"Error: Directory not found: {target_dir}", Colors.RED)) - return 1 - - # Resolve package: --package CLI → task.json.package → default_package - cli_package: str | None = getattr(args, "package", None) - package: str | None = None - if not is_monorepo(repo_root): - # Single-repo: ignore --package, no package prefix - if cli_package: - print(colored("Warning: --package ignored in single-repo project", Colors.YELLOW), file=sys.stderr) - elif cli_package: - if not validate_package(cli_package, repo_root): - packages = get_packages(repo_root) - available = ", ".join(sorted(packages.keys())) if packages else "(none)" - print(colored(f"Error: unknown package '{cli_package}'. Available: {available}", Colors.RED), file=sys.stderr) - return 1 - package = cli_package - else: - # Read task.json.package as inferred source - task_json_path = target_dir / FILE_TASK_JSON - task_pkg_value = None - if task_json_path.is_file(): - task_data = read_json(task_json_path) - if isinstance(task_data, dict): - task_pkg_value = task_data.get("package") - # Only pass string values to resolve_package (guard against malformed JSON) - task_package = task_pkg_value if isinstance(task_pkg_value, str) else None - package = resolve_package(task_package=task_package, repo_root=repo_root) - - # Monorepo fallback prohibition - if package is None: - packages = get_packages(repo_root) - available = ", ".join(sorted(packages.keys())) if packages else "(none)" - print(colored( - f"Error: monorepo project requires --package (or set default_package in config.yaml). Available: {available}", - Colors.RED, - ), file=sys.stderr) - return 1 - - print(colored("=== Initializing Agent Context Files ===", Colors.BLUE)) - print(f"Target dir: {target_dir}") - print(f"Dev type: {dev_type}") - if package: - print(f"Package: {package}") - print() - - # implement.jsonl - print(colored("Creating implement.jsonl...", Colors.CYAN)) - implement_entries = get_implement_base() - if dev_type in ("backend", "test"): - implement_entries.extend(get_implement_backend(package)) - elif dev_type == "frontend": - implement_entries.extend(get_implement_frontend(package)) - elif dev_type == "fullstack": - implement_entries.extend(get_implement_backend(package)) - implement_entries.extend(get_implement_frontend(package)) - - implement_file = target_dir / "implement.jsonl" - _write_jsonl(implement_file, implement_entries) - print(f" {colored('✓', Colors.GREEN)} {len(implement_entries)} entries") - - # check.jsonl - print(colored("Creating check.jsonl...", Colors.CYAN)) - check_entries = get_check_context(repo_root) - check_file = target_dir / "check.jsonl" - _write_jsonl(check_file, check_entries) - print(f" {colored('✓', Colors.GREEN)} {len(check_entries)} entries") - - # debug.jsonl - print(colored("Creating debug.jsonl...", Colors.CYAN)) - debug_entries = get_debug_context(repo_root) - debug_file = target_dir / "debug.jsonl" - _write_jsonl(debug_file, debug_entries) - print(f" {colored('✓', Colors.GREEN)} {len(debug_entries)} entries") - - # Update task.json dev_type and package - task_json_path = target_dir / FILE_TASK_JSON - if task_json_path.is_file(): - task_data = read_json(task_json_path) - if isinstance(task_data, dict): - task_data["dev_type"] = dev_type - task_data["package"] = package # Always sync to match resolved value - write_json(task_json_path, task_data) - - print() - print(colored("✓ All context files created", Colors.GREEN)) - print() - - # Show what was auto-injected - all_injected = [e["file"] for e in implement_entries] - print(colored("Auto-injected (defaults only):", Colors.YELLOW)) - for f in all_injected: - print(f" - {f}") - print() - - # Scan spec directory for available spec files the AI should consider - spec_base = repo_root / DIR_WORKFLOW / DIR_SPEC - if package: - spec_base = spec_base / package - available_specs: list[str] = [] - if spec_base.is_dir(): - for md_file in sorted(spec_base.rglob("*.md")): - rel = str(md_file.relative_to(repo_root)) - if rel not in all_injected: - available_specs.append(rel) - - if available_specs: - print(colored("Available spec files (not yet injected):", Colors.BLUE)) - for spec in available_specs: - print(f" - {spec}") - print() - - print(colored("Next steps:", Colors.BLUE)) - print(" 1. Review the spec files above and add relevant ones for your task:") - print(f" python3 task.py add-context <dir> implement <spec-path> \"<reason>\"") - print(" 2. Set as current: python3 task.py start <dir>") - - return 0 - - -# ============================================================================= -# Command: add-context -# ============================================================================= - -def cmd_add_context(args: argparse.Namespace) -> int: - """Add entry to JSONL context file.""" - repo_root = get_repo_root() - target_dir = resolve_task_dir(args.dir, repo_root) - - jsonl_name = args.file - path = args.path - reason = args.reason or "Added manually" - - if not target_dir.is_dir(): - print(colored(f"Error: Directory not found: {target_dir}", Colors.RED)) - return 1 - - # Support shorthand - if not jsonl_name.endswith(".jsonl"): - jsonl_name = f"{jsonl_name}.jsonl" - - jsonl_file = target_dir / jsonl_name - full_path = repo_root / path - - entry_type = "file" - if full_path.is_dir(): - entry_type = "directory" - if not path.endswith("/"): - path = f"{path}/" - elif not full_path.is_file(): - print(colored(f"Error: Path not found: {path}", Colors.RED)) - return 1 - - # Check if already exists - if jsonl_file.is_file(): - content = jsonl_file.read_text(encoding="utf-8") - if f'"{path}"' in content: - print(colored(f"Warning: Entry already exists for {path}", Colors.YELLOW)) - return 0 - - # Add entry - entry: dict - if entry_type == "directory": - entry = {"file": path, "type": "directory", "reason": reason} - else: - entry = {"file": path, "reason": reason} - - with jsonl_file.open("a", encoding="utf-8") as f: - f.write(json.dumps(entry, ensure_ascii=False) + "\n") - - print(colored(f"Added {entry_type}: {path}", Colors.GREEN)) - return 0 - - -# ============================================================================= -# Command: validate -# ============================================================================= - -def cmd_validate(args: argparse.Namespace) -> int: - """Validate JSONL context files.""" - repo_root = get_repo_root() - target_dir = resolve_task_dir(args.dir, repo_root) - - if not target_dir.is_dir(): - print(colored("Error: task directory required", Colors.RED)) - return 1 - - print(colored("=== Validating Context Files ===", Colors.BLUE)) - print(f"Target dir: {target_dir}") - print() - - total_errors = 0 - for jsonl_name in ["implement.jsonl", "check.jsonl", "debug.jsonl"]: - jsonl_file = target_dir / jsonl_name - errors = _validate_jsonl(jsonl_file, repo_root) - total_errors += errors - - print() - if total_errors == 0: - print(colored("✓ All validations passed", Colors.GREEN)) - return 0 - else: - print(colored(f"✗ Validation failed ({total_errors} errors)", Colors.RED)) - return 1 - - -def _validate_jsonl(jsonl_file: Path, repo_root: Path) -> int: - """Validate a single JSONL file.""" - file_name = jsonl_file.name - errors = 0 - - if not jsonl_file.is_file(): - print(f" {colored(f'{file_name}: not found (skipped)', Colors.YELLOW)}") - return 0 - - line_num = 0 - for line in jsonl_file.read_text(encoding="utf-8").splitlines(): - line_num += 1 - if not line.strip(): - continue - - try: - data = json.loads(line) - except json.JSONDecodeError: - print(f" {colored(f'{file_name}:{line_num}: Invalid JSON', Colors.RED)}") - errors += 1 - continue - - file_path = data.get("file") - entry_type = data.get("type", "file") - - if not file_path: - print(f" {colored(f'{file_name}:{line_num}: Missing file field', Colors.RED)}") - errors += 1 - continue - - full_path = repo_root / file_path - if entry_type == "directory": - if not full_path.is_dir(): - print(f" {colored(f'{file_name}:{line_num}: Directory not found: {file_path}', Colors.RED)}") - errors += 1 - else: - if not full_path.is_file(): - print(f" {colored(f'{file_name}:{line_num}: File not found: {file_path}', Colors.RED)}") - errors += 1 - - if errors == 0: - print(f" {colored(f'{file_name}: ✓ ({line_num} entries)', Colors.GREEN)}") - else: - print(f" {colored(f'{file_name}: ✗ ({errors} errors)', Colors.RED)}") - - return errors - - -# ============================================================================= -# Command: list-context -# ============================================================================= - -def cmd_list_context(args: argparse.Namespace) -> int: - """List JSONL context entries.""" - repo_root = get_repo_root() - target_dir = resolve_task_dir(args.dir, repo_root) - - if not target_dir.is_dir(): - print(colored("Error: task directory required", Colors.RED)) - return 1 - - print(colored("=== Context Files ===", Colors.BLUE)) - print() - - for jsonl_name in ["implement.jsonl", "check.jsonl", "debug.jsonl"]: - jsonl_file = target_dir / jsonl_name - if not jsonl_file.is_file(): - continue - - print(colored(f"[{jsonl_name}]", Colors.CYAN)) - - count = 0 - for line in jsonl_file.read_text(encoding="utf-8").splitlines(): - if not line.strip(): - continue - - try: - data = json.loads(line) - except json.JSONDecodeError: - continue - - count += 1 - file_path = data.get("file", "?") - entry_type = data.get("type", "file") - reason = data.get("reason", "-") - - if entry_type == "directory": - print(f" {colored(f'{count}.', Colors.GREEN)} [DIR] {file_path}") - else: - print(f" {colored(f'{count}.', Colors.GREEN)} {file_path}") - print(f" {colored('→', Colors.YELLOW)} {reason}") - - print() - - return 0 diff --git a/.trellis/scripts/common/task_queue.py b/.trellis/scripts/common/task_queue.py deleted file mode 100755 index f7485e2e..00000000 --- a/.trellis/scripts/common/task_queue.py +++ /dev/null @@ -1,188 +0,0 @@ -#!/usr/bin/env python3 -""" -Task queue utility functions. - -Provides: - list_tasks_by_status - List tasks by status - list_pending_tasks - List tasks with pending status - list_tasks_by_assignee - List tasks by assignee - list_my_tasks - List tasks assigned to current developer - get_task_stats - Get P0/P1/P2/P3 counts -""" - -from __future__ import annotations - -from pathlib import Path - -from .paths import ( - get_repo_root, - get_developer, - get_tasks_dir, -) -from .tasks import iter_active_tasks - - -# ============================================================================= -# Internal helper -# ============================================================================= - -def _task_to_dict(t) -> dict: - """Convert TaskInfo to the dict format callers expect.""" - return { - "priority": t.priority, - "id": t.raw.get("id", ""), - "title": t.title, - "status": t.status, - "assignee": t.assignee or "-", - "dir": t.dir_name, - "children": list(t.children), - "parent": t.parent, - } - - -# ============================================================================= -# Public Functions -# ============================================================================= - -def list_tasks_by_status( - filter_status: str | None = None, - repo_root: Path | None = None -) -> list[dict]: - """List tasks by status. - - Args: - filter_status: Optional status filter. - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - List of task info dicts with keys: priority, id, title, status, assignee. - """ - if repo_root is None: - repo_root = get_repo_root() - - tasks_dir = get_tasks_dir(repo_root) - results = [] - - for t in iter_active_tasks(tasks_dir): - if filter_status and t.status != filter_status: - continue - results.append(_task_to_dict(t)) - - return results - - -def list_pending_tasks(repo_root: Path | None = None) -> list[dict]: - """List pending tasks. - - Args: - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - List of task info dicts. - """ - return list_tasks_by_status("planning", repo_root) - - -def list_tasks_by_assignee( - assignee: str, - filter_status: str | None = None, - repo_root: Path | None = None -) -> list[dict]: - """List tasks assigned to a specific developer. - - Args: - assignee: Developer name. - filter_status: Optional status filter. - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - List of task info dicts. - """ - if repo_root is None: - repo_root = get_repo_root() - - tasks_dir = get_tasks_dir(repo_root) - results = [] - - for t in iter_active_tasks(tasks_dir): - if (t.assignee or "-") != assignee: - continue - if filter_status and t.status != filter_status: - continue - results.append(_task_to_dict(t)) - - return results - - -def list_my_tasks( - filter_status: str | None = None, - repo_root: Path | None = None -) -> list[dict]: - """List tasks assigned to current developer. - - Args: - filter_status: Optional status filter. - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - List of task info dicts. - - Raises: - ValueError: If developer not set. - """ - if repo_root is None: - repo_root = get_repo_root() - - developer = get_developer(repo_root) - if not developer: - raise ValueError("Developer not set") - - return list_tasks_by_assignee(developer, filter_status, repo_root) - - -def get_task_stats(repo_root: Path | None = None) -> dict[str, int]: - """Get task statistics. - - Args: - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - Dict with keys: P0, P1, P2, P3, Total. - """ - if repo_root is None: - repo_root = get_repo_root() - - tasks_dir = get_tasks_dir(repo_root) - stats = {"P0": 0, "P1": 0, "P2": 0, "P3": 0, "Total": 0} - - for t in iter_active_tasks(tasks_dir): - if t.priority in stats: - stats[t.priority] += 1 - stats["Total"] += 1 - - return stats - - -def format_task_stats(stats: dict[str, int]) -> str: - """Format task stats as string. - - Args: - stats: Stats dict from get_task_stats. - - Returns: - Formatted string like "P0:0 P1:1 P2:2 P3:0 Total:3". - """ - return f"P0:{stats['P0']} P1:{stats['P1']} P2:{stats['P2']} P3:{stats['P3']} Total:{stats['Total']}" - - -# ============================================================================= -# Main Entry (for testing) -# ============================================================================= - -if __name__ == "__main__": - stats = get_task_stats() - print(format_task_stats(stats)) - print() - print("Pending tasks:") - for task in list_pending_tasks(): - print(f" {task['priority']}|{task['id']}|{task['title']}|{task['status']}|{task['assignee']}") diff --git a/.trellis/scripts/common/task_store.py b/.trellis/scripts/common/task_store.py deleted file mode 100755 index 94ac7e53..00000000 --- a/.trellis/scripts/common/task_store.py +++ /dev/null @@ -1,536 +0,0 @@ -#!/usr/bin/env python3 -""" -Task CRUD operations. - -Provides: - ensure_tasks_dir - Ensure tasks directory exists - cmd_create - Create a new task - cmd_archive - Archive completed task - cmd_set_branch - Set git branch for task - cmd_set_base_branch - Set PR target branch - cmd_set_scope - Set scope for PR title - cmd_add_subtask - Link child task to parent - cmd_remove_subtask - Unlink child task from parent -""" - -from __future__ import annotations - -import argparse -import re -import sys -from datetime import datetime -from pathlib import Path - -from .config import ( - get_packages, - is_monorepo, - resolve_package, - validate_package, -) -from .git import run_git -from .io import read_json, write_json -from .log import Colors, colored -from .paths import ( - DIR_ARCHIVE, - DIR_TASKS, - DIR_WORKFLOW, - FILE_TASK_JSON, - clear_current_task, - generate_task_date_prefix, - get_current_task, - get_developer, - get_repo_root, - get_tasks_dir, -) -from .task_utils import ( - archive_task_complete, - find_task_by_name, - resolve_task_dir, - run_task_hooks, -) - - -# ============================================================================= -# Helper Functions -# ============================================================================= - -def _slugify(title: str) -> str: - """Convert title to slug (only works with ASCII).""" - result = title.lower() - result = re.sub(r"[^a-z0-9]", "-", result) - result = re.sub(r"-+", "-", result) - result = result.strip("-") - return result - - -def ensure_tasks_dir(repo_root: Path) -> Path: - """Ensure tasks directory exists.""" - tasks_dir = get_tasks_dir(repo_root) - archive_dir = tasks_dir / "archive" - - if not tasks_dir.exists(): - tasks_dir.mkdir(parents=True) - print(colored(f"Created tasks directory: {tasks_dir}", Colors.GREEN), file=sys.stderr) - - if not archive_dir.exists(): - archive_dir.mkdir(parents=True) - - return tasks_dir - - -# ============================================================================= -# Command: create -# ============================================================================= - -def cmd_create(args: argparse.Namespace) -> int: - """Create a new task.""" - repo_root = get_repo_root() - - if not args.title: - print(colored("Error: title is required", Colors.RED), file=sys.stderr) - return 1 - - # Validate --package (CLI source: fail-fast) - package: str | None = getattr(args, "package", None) - if not is_monorepo(repo_root): - # Single-repo: ignore --package, no package prefix - if package: - print(colored(f"Warning: --package ignored in single-repo project", Colors.YELLOW), file=sys.stderr) - package = None - elif package: - if not validate_package(package, repo_root): - packages = get_packages(repo_root) - available = ", ".join(sorted(packages.keys())) if packages else "(none)" - print(colored(f"Error: unknown package '{package}'. Available: {available}", Colors.RED), file=sys.stderr) - return 1 - else: - # Inferred: default_package → None (no task.json yet for create) - package = resolve_package(repo_root=repo_root) - - # Default assignee to current developer - assignee = args.assignee - if not assignee: - assignee = get_developer(repo_root) - if not assignee: - print(colored("Error: No developer set. Run init_developer.py first or use --assignee", Colors.RED), file=sys.stderr) - return 1 - - ensure_tasks_dir(repo_root) - - # Get current developer as creator - creator = get_developer(repo_root) or assignee - - # Generate slug if not provided - slug = args.slug or _slugify(args.title) - if not slug: - print(colored("Error: could not generate slug from title", Colors.RED), file=sys.stderr) - return 1 - - # Create task directory with MM-DD-slug format - tasks_dir = get_tasks_dir(repo_root) - date_prefix = generate_task_date_prefix() - dir_name = f"{date_prefix}-{slug}" - task_dir = tasks_dir / dir_name - task_json_path = task_dir / FILE_TASK_JSON - - if task_dir.exists(): - print(colored(f"Warning: Task directory already exists: {dir_name}", Colors.YELLOW), file=sys.stderr) - else: - task_dir.mkdir(parents=True) - - today = datetime.now().strftime("%Y-%m-%d") - - # Record current branch as base_branch (PR target) - _, branch_out, _ = run_git(["branch", "--show-current"], cwd=repo_root) - current_branch = branch_out.strip() or "main" - - task_data = { - "id": slug, - "name": slug, - "title": args.title, - "description": args.description or "", - "status": "planning", - "dev_type": None, - "scope": None, - "package": package, - "priority": args.priority, - "creator": creator, - "assignee": assignee, - "createdAt": today, - "completedAt": None, - "branch": None, - "base_branch": current_branch, - "worktree_path": None, - "current_phase": 0, - "next_action": [ - {"phase": 1, "action": "brainstorm"}, - {"phase": 2, "action": "research"}, - {"phase": 3, "action": "implement"}, - {"phase": 4, "action": "check"}, - {"phase": 5, "action": "update-spec"}, - {"phase": 6, "action": "record-session"}, - ], - "commit": None, - "pr_url": None, - "subtasks": [], - "children": [], - "parent": None, - "relatedFiles": [], - "notes": "", - "meta": {}, - } - - write_json(task_json_path, task_data) - - # Handle --parent: establish bidirectional link - if args.parent: - parent_dir = resolve_task_dir(args.parent, repo_root) - parent_json_path = parent_dir / FILE_TASK_JSON - if not parent_json_path.is_file(): - print(colored(f"Warning: Parent task.json not found: {args.parent}", Colors.YELLOW), file=sys.stderr) - else: - parent_data = read_json(parent_json_path) - if parent_data: - # Add child to parent's children list - parent_children = parent_data.get("children", []) - if dir_name not in parent_children: - parent_children.append(dir_name) - parent_data["children"] = parent_children - write_json(parent_json_path, parent_data) - - # Set parent in child's task.json - task_data["parent"] = parent_dir.name - write_json(task_json_path, task_data) - - print(colored(f"Linked as child of: {parent_dir.name}", Colors.GREEN), file=sys.stderr) - - print(colored(f"Created task: {dir_name}", Colors.GREEN), file=sys.stderr) - print("", file=sys.stderr) - print(colored("Next steps:", Colors.BLUE), file=sys.stderr) - print(" 1. Create prd.md with requirements", file=sys.stderr) - print(" 2. Run: python3 task.py init-context <dir> <dev_type>", file=sys.stderr) - print(" 3. Run: python3 task.py start <dir>", file=sys.stderr) - print("", file=sys.stderr) - - # Output relative path for script chaining - print(f"{DIR_WORKFLOW}/{DIR_TASKS}/{dir_name}") - - run_task_hooks("after_create", task_json_path, repo_root) - return 0 - - -# ============================================================================= -# Command: archive -# ============================================================================= - -def cmd_archive(args: argparse.Namespace) -> int: - """Archive completed task.""" - repo_root = get_repo_root() - task_name = args.name - - if not task_name: - print(colored("Error: Task name is required", Colors.RED), file=sys.stderr) - return 1 - - tasks_dir = get_tasks_dir(repo_root) - - # Find task directory - task_dir = find_task_by_name(task_name, tasks_dir) - - if not task_dir or not task_dir.is_dir(): - print(colored(f"Error: Task not found: {task_name}", Colors.RED), file=sys.stderr) - print("Active tasks:", file=sys.stderr) - # Import lazily to avoid circular dependency - from .tasks import iter_active_tasks - for t in iter_active_tasks(tasks_dir): - print(f" - {t.dir_name}/", file=sys.stderr) - return 1 - - dir_name = task_dir.name - task_json_path = task_dir / FILE_TASK_JSON - - # Update status before archiving - today = datetime.now().strftime("%Y-%m-%d") - if task_json_path.is_file(): - data = read_json(task_json_path) - if data: - data["status"] = "completed" - data["completedAt"] = today - write_json(task_json_path, data) - - # Handle subtask relationships on archive - task_parent = data.get("parent") - task_children = data.get("children", []) - - # If this is a child, remove from parent's children list - if task_parent: - parent_dir = find_task_by_name(task_parent, tasks_dir) - if parent_dir: - parent_json = parent_dir / FILE_TASK_JSON - if parent_json.is_file(): - parent_data = read_json(parent_json) - if parent_data: - parent_children = parent_data.get("children", []) - if dir_name in parent_children: - parent_children.remove(dir_name) - parent_data["children"] = parent_children - write_json(parent_json, parent_data) - - # If this is a parent, clear parent field in all children - if task_children: - for child_name in task_children: - child_dir_path = find_task_by_name(child_name, tasks_dir) - if child_dir_path: - child_json = child_dir_path / FILE_TASK_JSON - if child_json.is_file(): - child_data = read_json(child_json) - if child_data: - child_data["parent"] = None - write_json(child_json, child_data) - - # Clear if current task - current = get_current_task(repo_root) - if current and dir_name in current: - clear_current_task(repo_root) - - # Archive - result = archive_task_complete(task_dir, repo_root) - if "archived_to" in result: - archive_dest = Path(result["archived_to"]) - year_month = archive_dest.parent.name - print(colored(f"Archived: {dir_name} -> archive/{year_month}/", Colors.GREEN), file=sys.stderr) - - # Auto-commit unless --no-commit - if not getattr(args, "no_commit", False): - _auto_commit_archive(dir_name, repo_root) - - # Return the archive path - print(f"{DIR_WORKFLOW}/{DIR_TASKS}/{DIR_ARCHIVE}/{year_month}/{dir_name}") - - # Run hooks with the archived path - archived_json = archive_dest / FILE_TASK_JSON - run_task_hooks("after_archive", archived_json, repo_root) - return 0 - - return 1 - - -def _auto_commit_archive(task_name: str, repo_root: Path) -> None: - """Stage .trellis/tasks/ changes and commit after archive.""" - tasks_rel = f"{DIR_WORKFLOW}/{DIR_TASKS}" - run_git(["add", "-A", tasks_rel], cwd=repo_root) - - # Check if there are staged changes - rc, _, _ = run_git( - ["diff", "--cached", "--quiet", "--", tasks_rel], cwd=repo_root - ) - if rc == 0: - print("[OK] No task changes to commit.", file=sys.stderr) - return - - commit_msg = f"chore(task): archive {task_name}" - rc, _, err = run_git(["commit", "-m", commit_msg], cwd=repo_root) - if rc == 0: - print(f"[OK] Auto-committed: {commit_msg}", file=sys.stderr) - else: - print(f"[WARN] Auto-commit failed: {err.strip()}", file=sys.stderr) - - -# ============================================================================= -# Command: add-subtask -# ============================================================================= - -def cmd_add_subtask(args: argparse.Namespace) -> int: - """Link a child task to a parent task.""" - repo_root = get_repo_root() - - parent_dir = resolve_task_dir(args.parent_dir, repo_root) - child_dir = resolve_task_dir(args.child_dir, repo_root) - - parent_json_path = parent_dir / FILE_TASK_JSON - child_json_path = child_dir / FILE_TASK_JSON - - if not parent_json_path.is_file(): - print(colored(f"Error: Parent task.json not found: {args.parent_dir}", Colors.RED), file=sys.stderr) - return 1 - - if not child_json_path.is_file(): - print(colored(f"Error: Child task.json not found: {args.child_dir}", Colors.RED), file=sys.stderr) - return 1 - - parent_data = read_json(parent_json_path) - child_data = read_json(child_json_path) - - if not parent_data or not child_data: - print(colored("Error: Failed to read task.json", Colors.RED), file=sys.stderr) - return 1 - - # Check if child already has a parent - existing_parent = child_data.get("parent") - if existing_parent: - print(colored(f"Error: Child task already has a parent: {existing_parent}", Colors.RED), file=sys.stderr) - return 1 - - # Add child to parent's children list - parent_children = parent_data.get("children", []) - child_dir_name = child_dir.name - if child_dir_name not in parent_children: - parent_children.append(child_dir_name) - parent_data["children"] = parent_children - - # Set parent in child's task.json - child_data["parent"] = parent_dir.name - - # Write both - write_json(parent_json_path, parent_data) - write_json(child_json_path, child_data) - - print(colored(f"Linked: {child_dir.name} -> {parent_dir.name}", Colors.GREEN), file=sys.stderr) - return 0 - - -# ============================================================================= -# Command: remove-subtask -# ============================================================================= - -def cmd_remove_subtask(args: argparse.Namespace) -> int: - """Unlink a child task from a parent task.""" - repo_root = get_repo_root() - - parent_dir = resolve_task_dir(args.parent_dir, repo_root) - child_dir = resolve_task_dir(args.child_dir, repo_root) - - parent_json_path = parent_dir / FILE_TASK_JSON - child_json_path = child_dir / FILE_TASK_JSON - - if not parent_json_path.is_file(): - print(colored(f"Error: Parent task.json not found: {args.parent_dir}", Colors.RED), file=sys.stderr) - return 1 - - if not child_json_path.is_file(): - print(colored(f"Error: Child task.json not found: {args.child_dir}", Colors.RED), file=sys.stderr) - return 1 - - parent_data = read_json(parent_json_path) - child_data = read_json(child_json_path) - - if not parent_data or not child_data: - print(colored("Error: Failed to read task.json", Colors.RED), file=sys.stderr) - return 1 - - # Remove child from parent's children list - parent_children = parent_data.get("children", []) - child_dir_name = child_dir.name - if child_dir_name in parent_children: - parent_children.remove(child_dir_name) - parent_data["children"] = parent_children - - # Clear parent in child's task.json - child_data["parent"] = None - - # Write both - write_json(parent_json_path, parent_data) - write_json(child_json_path, child_data) - - print(colored(f"Unlinked: {child_dir.name} from {parent_dir.name}", Colors.GREEN), file=sys.stderr) - return 0 - - -# ============================================================================= -# Command: set-branch -# ============================================================================= - -def cmd_set_branch(args: argparse.Namespace) -> int: - """Set git branch for task.""" - repo_root = get_repo_root() - target_dir = resolve_task_dir(args.dir, repo_root) - branch = args.branch - - if not branch: - print(colored("Error: Missing arguments", Colors.RED)) - print("Usage: python3 task.py set-branch <task-dir> <branch-name>") - return 1 - - task_json = target_dir / FILE_TASK_JSON - if not task_json.is_file(): - print(colored(f"Error: task.json not found at {target_dir}", Colors.RED)) - return 1 - - data = read_json(task_json) - if not data: - return 1 - - data["branch"] = branch - write_json(task_json, data) - - print(colored(f"✓ Branch set to: {branch}", Colors.GREEN)) - print() - print(colored("Now you can start the multi-agent pipeline:", Colors.BLUE)) - print(f" python3 ./.trellis/scripts/multi_agent/start.py {args.dir}") - return 0 - - -# ============================================================================= -# Command: set-base-branch -# ============================================================================= - -def cmd_set_base_branch(args: argparse.Namespace) -> int: - """Set the base branch (PR target) for task.""" - repo_root = get_repo_root() - target_dir = resolve_task_dir(args.dir, repo_root) - base_branch = args.base_branch - - if not base_branch: - print(colored("Error: Missing arguments", Colors.RED)) - print("Usage: python3 task.py set-base-branch <task-dir> <base-branch>") - print("Example: python3 task.py set-base-branch <dir> develop") - print() - print("This sets the target branch for PR (the branch your feature will merge into).") - return 1 - - task_json = target_dir / FILE_TASK_JSON - if not task_json.is_file(): - print(colored(f"Error: task.json not found at {target_dir}", Colors.RED)) - return 1 - - data = read_json(task_json) - if not data: - return 1 - - data["base_branch"] = base_branch - write_json(task_json, data) - - print(colored(f"✓ Base branch set to: {base_branch}", Colors.GREEN)) - print(f" PR will target: {base_branch}") - return 0 - - -# ============================================================================= -# Command: set-scope -# ============================================================================= - -def cmd_set_scope(args: argparse.Namespace) -> int: - """Set scope for PR title.""" - repo_root = get_repo_root() - target_dir = resolve_task_dir(args.dir, repo_root) - scope = args.scope - - if not scope: - print(colored("Error: Missing arguments", Colors.RED)) - print("Usage: python3 task.py set-scope <task-dir> <scope>") - return 1 - - task_json = target_dir / FILE_TASK_JSON - if not task_json.is_file(): - print(colored(f"Error: task.json not found at {target_dir}", Colors.RED)) - return 1 - - data = read_json(task_json) - if not data: - return 1 - - data["scope"] = scope - write_json(task_json, data) - - print(colored(f"✓ Scope set to: {scope}", Colors.GREEN)) - return 0 diff --git a/.trellis/scripts/common/task_utils.py b/.trellis/scripts/common/task_utils.py deleted file mode 100755 index 62c215e3..00000000 --- a/.trellis/scripts/common/task_utils.py +++ /dev/null @@ -1,274 +0,0 @@ -#!/usr/bin/env python3 -""" -Task utility functions. - -Provides: - is_safe_task_path - Validate task path is safe to operate on - find_task_by_name - Find task directory by name - resolve_task_dir - Resolve task directory from name, relative, or absolute path - archive_task_dir - Archive task to monthly directory - run_task_hooks - Run lifecycle hooks for task events -""" - -from __future__ import annotations - -import shutil -import sys -from datetime import datetime -from pathlib import Path - -from .paths import get_repo_root, get_tasks_dir - - -# ============================================================================= -# Path Safety -# ============================================================================= - -def is_safe_task_path(task_path: str, repo_root: Path | None = None) -> bool: - """Check if a relative task path is safe to operate on. - - Args: - task_path: Task path (relative to repo_root). - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - True if safe, False if dangerous. - """ - if repo_root is None: - repo_root = get_repo_root() - - normalized = task_path.replace("\\", "/") - - # Check empty or null - if not normalized or normalized == "null": - print("Error: empty or null task path", file=sys.stderr) - return False - - # Reject absolute paths - if Path(task_path).is_absolute(): - print(f"Error: absolute path not allowed: {task_path}", file=sys.stderr) - return False - - # Reject ".", "..", paths starting with "./" or "../", or containing ".." - if normalized in (".", "..") or normalized.startswith("./") or normalized.startswith("../") or ".." in normalized: - print(f"Error: path traversal not allowed: {task_path}", file=sys.stderr) - return False - - # Final check: ensure resolved path is not the repo root - abs_path = repo_root / Path(normalized) - if abs_path.exists(): - try: - resolved = abs_path.resolve() - root_resolved = repo_root.resolve() - if resolved == root_resolved: - print(f"Error: path resolves to repo root: {task_path}", file=sys.stderr) - return False - except (OSError, IOError): - pass - - return True - - -# ============================================================================= -# Task Lookup -# ============================================================================= - -def find_task_by_name(task_name: str, tasks_dir: Path) -> Path | None: - """Find task directory by name (exact or suffix match). - - Args: - task_name: Task name to find. - tasks_dir: Tasks directory path. - - Returns: - Absolute path to task directory, or None if not found. - """ - if not task_name or not tasks_dir or not tasks_dir.is_dir(): - return None - - # Try exact match first - exact_match = tasks_dir / task_name - if exact_match.is_dir(): - return exact_match - - # Try suffix match (e.g., "my-task" matches "01-21-my-task") - for d in tasks_dir.iterdir(): - if d.is_dir() and d.name.endswith(f"-{task_name}"): - return d - - return None - - -# ============================================================================= -# Archive Operations -# ============================================================================= - -def archive_task_dir(task_dir_abs: Path, repo_root: Path | None = None) -> Path | None: - """Archive a task directory to archive/{YYYY-MM}/. - - Args: - task_dir_abs: Absolute path to task directory. - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - Path to archived directory, or None on error. - """ - if not task_dir_abs.is_dir(): - print(f"Error: task directory not found: {task_dir_abs}", file=sys.stderr) - return None - - # Get tasks directory (parent of the task) - tasks_dir = task_dir_abs.parent - archive_dir = tasks_dir / "archive" - year_month = datetime.now().strftime("%Y-%m") - month_dir = archive_dir / year_month - - # Create archive directory - try: - month_dir.mkdir(parents=True, exist_ok=True) - except (OSError, IOError) as e: - print(f"Error: Failed to create archive directory: {e}", file=sys.stderr) - return None - - # Move task to archive - task_name = task_dir_abs.name - dest = month_dir / task_name - - try: - shutil.move(str(task_dir_abs), str(dest)) - except (OSError, IOError, shutil.Error) as e: - print(f"Error: Failed to move task to archive: {e}", file=sys.stderr) - return None - - return dest - - -def archive_task_complete( - task_dir_abs: Path, - repo_root: Path | None = None -) -> dict[str, str]: - """Complete archive workflow: archive directory. - - Args: - task_dir_abs: Absolute path to task directory. - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - Dict with archive result info. - """ - if not task_dir_abs.is_dir(): - print(f"Error: task directory not found: {task_dir_abs}", file=sys.stderr) - return {} - - archive_dest = archive_task_dir(task_dir_abs, repo_root) - if archive_dest: - return {"archived_to": str(archive_dest)} - - return {} - - -# ============================================================================= -# Task Directory Resolution -# ============================================================================= - -def resolve_task_dir(target_dir: str, repo_root: Path) -> Path: - """Resolve task directory to absolute path. - - Supports: - - Absolute path: /path/to/task - - Relative path: .trellis/tasks/01-31-my-task - - Task name: my-task (uses find_task_by_name for lookup) - - Args: - target_dir: Task directory specification. - repo_root: Repository root path. - - Returns: - Resolved absolute path. - """ - if not target_dir: - return Path() - - normalized = target_dir.replace("\\", "/") - while normalized.startswith("./"): - normalized = normalized[2:] - - # Absolute path - if Path(target_dir).is_absolute(): - return Path(target_dir) - - # Relative path (contains path separator or starts with .trellis) - if "/" in normalized or normalized.startswith(".trellis"): - return repo_root / Path(normalized) - - # Task name - try to find in tasks directory - tasks_dir = get_tasks_dir(repo_root) - found = find_task_by_name(target_dir, tasks_dir) - if found: - return found - - # Fallback to treating as relative path - return repo_root / Path(normalized) - - -# ============================================================================= -# Lifecycle Hooks -# ============================================================================= - -def run_task_hooks(event: str, task_json_path: Path, repo_root: Path) -> None: - """Run lifecycle hooks for a task event. - - Args: - event: Event name (e.g. "after_create"). - task_json_path: Absolute path to the task's task.json. - repo_root: Repository root for cwd and config lookup. - """ - import os - import subprocess - - from .config import get_hooks - from .log import Colors, colored - - commands = get_hooks(event, repo_root) - if not commands: - return - - env = {**os.environ, "TASK_JSON_PATH": str(task_json_path)} - - for cmd in commands: - try: - result = subprocess.run( - cmd, - shell=True, - cwd=repo_root, - env=env, - capture_output=True, - text=True, - encoding="utf-8", - errors="replace", - ) - if result.returncode != 0: - print( - colored(f"[WARN] Hook failed ({event}): {cmd}", Colors.YELLOW), - file=sys.stderr, - ) - if result.stderr.strip(): - print(f" {result.stderr.strip()}", file=sys.stderr) - except Exception as e: - print( - colored(f"[WARN] Hook error ({event}): {cmd} — {e}", Colors.YELLOW), - file=sys.stderr, - ) - - -# ============================================================================= -# Main Entry (for testing) -# ============================================================================= - -if __name__ == "__main__": - repo = get_repo_root() - tasks = get_tasks_dir(repo) - - print(f"Tasks dir: {tasks}") - print(f"is_safe_task_path('.trellis/tasks/test'): {is_safe_task_path('.trellis/tasks/test', repo)}") - print(f"is_safe_task_path('../test'): {is_safe_task_path('../test', repo)}") diff --git a/.trellis/scripts/common/tasks.py b/.trellis/scripts/common/tasks.py deleted file mode 100755 index 47d78c27..00000000 --- a/.trellis/scripts/common/tasks.py +++ /dev/null @@ -1,109 +0,0 @@ -""" -Task data access layer. - -Single source of truth for loading and iterating task directories. -Replaces scattered task.json parsing across 9+ files. - -Provides: - load_task — Load a single task by directory path - iter_active_tasks — Iterate all non-archived tasks (sorted) - get_all_statuses — Get {dir_name: status} map for children progress -""" - -from __future__ import annotations - -from collections.abc import Iterator -from pathlib import Path - -from .io import read_json -from .paths import FILE_TASK_JSON -from .types import TaskInfo - - -def load_task(task_dir: Path) -> TaskInfo | None: - """Load task from a directory containing task.json. - - Args: - task_dir: Absolute path to the task directory. - - Returns: - TaskInfo if task.json exists and is valid, None otherwise. - """ - task_json = task_dir / FILE_TASK_JSON - if not task_json.is_file(): - return None - - data = read_json(task_json) - if not data: - return None - - return TaskInfo( - dir_name=task_dir.name, - directory=task_dir, - title=data.get("title") or data.get("name") or "unknown", - status=data.get("status", "unknown"), - assignee=data.get("assignee", ""), - priority=data.get("priority", "P2"), - children=tuple(data.get("children", [])), - parent=data.get("parent"), - package=data.get("package"), - raw=data, - ) - - -def iter_active_tasks(tasks_dir: Path) -> Iterator[TaskInfo]: - """Iterate all active (non-archived) tasks, sorted by directory name. - - Skips the "archive" directory and directories without valid task.json. - - Args: - tasks_dir: Path to the tasks directory. - - Yields: - TaskInfo for each valid task. - """ - if not tasks_dir.is_dir(): - return - - for d in sorted(tasks_dir.iterdir()): - if not d.is_dir() or d.name == "archive": - continue - info = load_task(d) - if info is not None: - yield info - - -def get_all_statuses(tasks_dir: Path) -> dict[str, str]: - """Get a {dir_name: status} mapping for all active tasks. - - Useful for computing children progress without loading full TaskInfo. - - Args: - tasks_dir: Path to the tasks directory. - - Returns: - Dict mapping directory names to status strings. - """ - return {t.dir_name: t.status for t in iter_active_tasks(tasks_dir)} - - -def children_progress( - children: tuple[str, ...] | list[str], - all_statuses: dict[str, str], -) -> str: - """Format children progress string like " [2/3 done]". - - Args: - children: List of child directory names. - all_statuses: Status map from get_all_statuses(). - - Returns: - Formatted string, or "" if no children. - """ - if not children: - return "" - done = sum( - 1 for c in children - if all_statuses.get(c) in ("completed", "done") - ) - return f" [{done}/{len(children)} done]" diff --git a/.trellis/scripts/common/types.py b/.trellis/scripts/common/types.py deleted file mode 100755 index f78b7dfe..00000000 --- a/.trellis/scripts/common/types.py +++ /dev/null @@ -1,112 +0,0 @@ -""" -Core type definitions for Trellis task data. - -Provides: - TaskData — TypedDict for task.json shape (read-path type hints only) - TaskInfo — Frozen dataclass for loaded task (the public API type) - AgentRecord — TypedDict for registry.json agent entries -""" - -from __future__ import annotations - -from dataclasses import dataclass -from pathlib import Path -from typing import TypedDict - - -# ============================================================================= -# task.json shape (TypedDict — used only for read-path type hints) -# ============================================================================= - -class TaskData(TypedDict, total=False): - """Shape of task.json on disk. - - Used only for type annotations when reading task.json. - Writes must use the original dict to avoid losing unknown fields. - """ - - id: str - name: str - title: str - description: str - status: str - dev_type: str - scope: str | None - package: str | None - priority: str - creator: str - assignee: str - createdAt: str - completedAt: str | None - branch: str | None - base_branch: str | None - worktree_path: str | None - current_phase: int - next_action: list[dict] - commit: str | None - pr_url: str | None - subtasks: list[str] - children: list[str] - parent: str | None - relatedFiles: list[str] - notes: str - meta: dict - - -# ============================================================================= -# Loaded task object (frozen dataclass — the public API type) -# ============================================================================= - -@dataclass(frozen=True) -class TaskInfo: - """Immutable view of a loaded task. - - Created by load_task() / iter_active_tasks(). - Contains the commonly accessed fields; the original dict - is preserved in `raw` for write-back and uncommon field access. - """ - - dir_name: str - directory: Path - title: str - status: str - assignee: str - priority: str - children: tuple[str, ...] - parent: str | None - package: str | None - raw: dict # original dict — use for writes and uncommon fields - - @property - def name(self) -> str: - """Task name (id or name field).""" - return self.raw.get("name") or self.raw.get("id") or self.dir_name - - @property - def description(self) -> str: - return self.raw.get("description", "") - - @property - def branch(self) -> str | None: - return self.raw.get("branch") - - @property - def meta(self) -> dict: - return self.raw.get("meta", {}) - - -# ============================================================================= -# registry.json agent entry -# ============================================================================= - -class AgentRecord(TypedDict, total=False): - """Shape of an agent entry in registry.json.""" - - id: str - pid: int - task_dir: str - worktree_path: str - branch: str - platform: str - started_at: str - status: str diff --git a/.trellis/scripts/common/worktree.py b/.trellis/scripts/common/worktree.py deleted file mode 100755 index f9aa4baa..00000000 --- a/.trellis/scripts/common/worktree.py +++ /dev/null @@ -1,305 +0,0 @@ -#!/usr/bin/env python3 -""" -Worktree utilities for Multi-Agent Pipeline. - -Provides: - get_worktree_config - Get worktree.yaml path - get_worktree_base_dir - Get worktree storage directory - get_worktree_copy_files - Get files to copy list - get_worktree_post_create_hooks - Get post-create hooks - get_agents_dir - Get agents registry directory -""" - -from __future__ import annotations - -from pathlib import Path - -from .paths import ( - DIR_WORKFLOW, - get_repo_root, - get_workspace_dir, -) - - -# ============================================================================= -# YAML Simple Parser (no dependencies) -# ============================================================================= - - -def _unquote(s: str) -> str: - """Remove exactly one layer of matching surrounding quotes. - - Unlike str.strip('"'), this only removes the outermost pair, - preserving any nested quotes inside the value. - - Examples: - _unquote('"hello"') -> 'hello' - _unquote("'hello'") -> 'hello' - _unquote('"echo \\'hi\\'"') -> "echo 'hi'" - _unquote('hello') -> 'hello' - _unquote('"hello\\'') -> '"hello\\'' (mismatched, unchanged) - """ - if len(s) >= 2 and s[0] == s[-1] and s[0] in ('"', "'"): - return s[1:-1] - return s - - -def parse_simple_yaml(content: str) -> dict: - """Parse simple YAML with nested dict support (no dependencies). - - Supports: - - key: value (string) - - key: (followed by list items) - - item1 - - item2 - - key: (followed by nested dict) - nested_key: value - nested_key2: - - item - - Uses indentation to detect nesting (2+ spaces deeper = child). - - Args: - content: YAML content string. - - Returns: - Parsed dict (values can be str, list[str], or dict). - """ - lines = content.splitlines() - result: dict = {} - _parse_yaml_block(lines, 0, 0, result) - return result - - -def _parse_yaml_block( - lines: list[str], start: int, min_indent: int, target: dict -) -> int: - """Parse a YAML block into target dict, returning next line index.""" - i = start - current_list: list | None = None - - while i < len(lines): - line = lines[i] - stripped = line.strip() - - # Skip empty lines and comments - if not stripped or stripped.startswith("#"): - i += 1 - continue - - # Calculate indentation - indent = len(line) - len(line.lstrip()) - - # If dedented past our block, we're done - if indent < min_indent: - break - - if stripped.startswith("- "): - if current_list is not None: - current_list.append(_unquote(stripped[2:].strip())) - i += 1 - elif ":" in stripped: - key, _, value = stripped.partition(":") - key = key.strip() - value = _unquote(value.strip()) - current_list = None - - if value: - # key: value - target[key] = value - i += 1 - else: - # key: (no value) — peek ahead to determine list vs nested dict - next_i, next_line = _next_content_line(lines, i + 1) - if next_i >= len(lines): - target[key] = {} - i = next_i - elif next_line.strip().startswith("- "): - # It's a list - current_list = [] - target[key] = current_list - i += 1 - else: - next_indent = len(next_line) - len(next_line.lstrip()) - if next_indent > indent: - # It's a nested dict - nested: dict = {} - target[key] = nested - i = _parse_yaml_block(lines, i + 1, next_indent, nested) - else: - # Empty value, same or less indent follows - target[key] = {} - i += 1 - else: - i += 1 - - return i - - -def _next_content_line(lines: list[str], start: int) -> tuple[int, str]: - """Find the next non-empty, non-comment line.""" - i = start - while i < len(lines): - stripped = lines[i].strip() - if stripped and not stripped.startswith("#"): - return i, lines[i] - i += 1 - return i, "" - - -def _yaml_get_value(config_file: Path, key: str) -> str | None: - """Read simple value from worktree.yaml. - - Args: - config_file: Path to config file. - key: Key to read. - - Returns: - Value string or None. - """ - try: - content = config_file.read_text(encoding="utf-8") - data = parse_simple_yaml(content) - value = data.get(key) - if isinstance(value, str): - return value - except (OSError, IOError): - pass - return None - - -def _yaml_get_list(config_file: Path, section: str) -> list[str]: - """Read list from worktree.yaml. - - Args: - config_file: Path to config file. - section: Section name. - - Returns: - List of items. - """ - try: - content = config_file.read_text(encoding="utf-8") - data = parse_simple_yaml(content) - value = data.get(section) - if isinstance(value, list): - return [str(item) for item in value] - except (OSError, IOError): - pass - return [] - - -# ============================================================================= -# Worktree Configuration -# ============================================================================= - -# Worktree config file relative path (relative to repo root) -WORKTREE_CONFIG_PATH = f"{DIR_WORKFLOW}/worktree.yaml" - - -def get_worktree_config(repo_root: Path | None = None) -> Path: - """Get worktree.yaml config file path. - - Args: - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - Absolute path to config file. - """ - if repo_root is None: - repo_root = get_repo_root() - return repo_root / WORKTREE_CONFIG_PATH - - -def get_worktree_base_dir(repo_root: Path | None = None) -> Path: - """Get worktree base directory. - - Args: - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - Absolute path to worktree base directory. - """ - if repo_root is None: - repo_root = get_repo_root() - - config = get_worktree_config(repo_root) - worktree_dir = _yaml_get_value(config, "worktree_dir") - - # Default value - if not worktree_dir: - worktree_dir = "../worktrees" - - # Handle relative path - if worktree_dir.startswith("../") or worktree_dir.startswith("./"): - # Relative to repo_root - return repo_root / worktree_dir - else: - # Absolute path - return Path(worktree_dir) - - -def get_worktree_copy_files(repo_root: Path | None = None) -> list[str]: - """Get files to copy list. - - Args: - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - List of file paths to copy. - """ - if repo_root is None: - repo_root = get_repo_root() - config = get_worktree_config(repo_root) - return _yaml_get_list(config, "copy") - - -def get_worktree_post_create_hooks(repo_root: Path | None = None) -> list[str]: - """Get post_create hooks. - - Args: - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - List of commands to run. - """ - if repo_root is None: - repo_root = get_repo_root() - config = get_worktree_config(repo_root) - return _yaml_get_list(config, "post_create") - - -# ============================================================================= -# Agents Registry -# ============================================================================= - -def get_agents_dir(repo_root: Path | None = None) -> Path | None: - """Get agents directory for current developer. - - Args: - repo_root: Repository root path. Defaults to auto-detected. - - Returns: - Absolute path to agents directory, or None if no workspace. - """ - if repo_root is None: - repo_root = get_repo_root() - - workspace_dir = get_workspace_dir(repo_root) - if workspace_dir: - return workspace_dir / ".agents" - return None - - -# ============================================================================= -# Main Entry (for testing) -# ============================================================================= - -if __name__ == "__main__": - repo = get_repo_root() - print(f"Repository root: {repo}") - print(f"Worktree config: {get_worktree_config(repo)}") - print(f"Worktree base dir: {get_worktree_base_dir(repo)}") - print(f"Copy files: {get_worktree_copy_files(repo)}") - print(f"Post create hooks: {get_worktree_post_create_hooks(repo)}") - print(f"Agents dir: {get_agents_dir(repo)}") diff --git a/.trellis/scripts/create_bootstrap.py b/.trellis/scripts/create_bootstrap.py deleted file mode 100755 index b295b7d3..00000000 --- a/.trellis/scripts/create_bootstrap.py +++ /dev/null @@ -1,298 +0,0 @@ -#!/usr/bin/env python3 -""" -Create Bootstrap Task for First-Time Setup. - -Creates a guided task to help users fill in project guidelines -after initializing Trellis for the first time. - -Usage: - python3 create_bootstrap.py [project-type] - -Arguments: - project-type: frontend | backend | fullstack (default: fullstack) - -Prerequisites: - - .trellis/.developer must exist (run init_developer.py first) - -Creates: - .trellis/tasks/00-bootstrap-guidelines/ - - task.json # Task metadata - - prd.md # Task description and guidance -""" - -from __future__ import annotations - -import json -import sys -from datetime import datetime -from pathlib import Path - -from common.paths import ( - DIR_WORKFLOW, - DIR_SCRIPTS, - DIR_TASKS, - get_repo_root, - get_developer, - get_tasks_dir, - set_current_task, -) -from common.config import get_spec_base, resolve_package - - -# ============================================================================= -# Constants -# ============================================================================= - -TASK_NAME = "00-bootstrap-guidelines" - - -# ============================================================================= -# PRD Content -# ============================================================================= - -def write_prd_header() -> str: - """Write PRD header section.""" - return """# Bootstrap: Fill Project Development Guidelines - -## Purpose - -Welcome to Trellis! This is your first task. - -AI agents use `.trellis/spec/` to understand YOUR project's coding conventions. -**Starting from scratch = AI writes generic code that doesn't match your project style.** - -Filling these guidelines is a one-time setup that pays off for every future AI session. - ---- - -## Your Task - -Fill in the guideline files based on your **existing codebase**. -""" - - -def write_prd_backend_section(spec_base: str) -> str: - """Write PRD backend section.""" - return f""" - -### Backend Guidelines - -| File | What to Document | -|------|------------------| -| `.trellis/{spec_base}/backend/directory-structure.md` | Where different file types go (routes, services, utils) | -| `.trellis/{spec_base}/backend/database-guidelines.md` | ORM, migrations, query patterns, naming conventions | -| `.trellis/{spec_base}/backend/error-handling.md` | How errors are caught, logged, and returned | -| `.trellis/{spec_base}/backend/logging-guidelines.md` | Log levels, format, what to log | -| `.trellis/{spec_base}/backend/quality-guidelines.md` | Code review standards, testing requirements | -""" - - -def write_prd_frontend_section(spec_base: str) -> str: - """Write PRD frontend section.""" - return f""" - -### Frontend Guidelines - -| File | What to Document | -|------|------------------| -| `.trellis/{spec_base}/frontend/directory-structure.md` | Component/page/hook organization | -| `.trellis/{spec_base}/frontend/component-guidelines.md` | Component patterns, props conventions | -| `.trellis/{spec_base}/frontend/hook-guidelines.md` | Custom hook naming, patterns | -| `.trellis/{spec_base}/frontend/state-management.md` | State library, patterns, what goes where | -| `.trellis/{spec_base}/frontend/type-safety.md` | TypeScript conventions, type organization | -| `.trellis/{spec_base}/frontend/quality-guidelines.md` | Linting, testing, accessibility | -""" - - -def write_prd_footer() -> str: - """Write PRD footer section.""" - return """ - -### Thinking Guides (Optional) - -The `.trellis/spec/guides/` directory contains thinking guides that are already -filled with general best practices. You can customize them for your project if needed. - ---- - -## How to Fill Guidelines - -### Principle: Document Reality, Not Ideals - -Write what your codebase **actually does**, not what you wish it did. -AI needs to match existing patterns, not introduce new ones. - -### Steps - -1. **Look at existing code** - Find 2-3 examples of each pattern -2. **Document the pattern** - Describe what you see -3. **Include file paths** - Reference real files as examples -4. **List anti-patterns** - What does your team avoid? - ---- - -## Tips for Using AI - -Ask AI to help analyze your codebase: - -- "Look at my codebase and document the patterns you see" -- "Analyze my code structure and summarize the conventions" -- "Find error handling patterns and document them" - -The AI will read your code and help you document it. - ---- - -## Completion Checklist - -- [ ] Guidelines filled for your project type -- [ ] At least 2-3 real code examples in each guideline -- [ ] Anti-patterns documented - -When done: - -```bash -python3 ./.trellis/scripts/task.py finish -python3 ./.trellis/scripts/task.py archive 00-bootstrap-guidelines -``` - ---- - -## Why This Matters - -After completing this task: - -1. AI will write code that matches your project style -2. Relevant `/trellis:before-*-dev` commands will inject real context -3. `/trellis:check-*` commands will validate against your actual standards -4. Future developers (human or AI) will onboard faster -""" - - -def write_prd(task_dir: Path, project_type: str, spec_base: str) -> None: - """Write prd.md file.""" - content = write_prd_header() - - if project_type == "frontend": - content += write_prd_frontend_section(spec_base) - elif project_type == "backend": - content += write_prd_backend_section(spec_base) - else: # fullstack - content += write_prd_backend_section(spec_base) - content += write_prd_frontend_section(spec_base) - - content += write_prd_footer() - - prd_file = task_dir / "prd.md" - prd_file.write_text(content, encoding="utf-8") - - -# ============================================================================= -# Task JSON -# ============================================================================= - -def write_task_json(task_dir: Path, developer: str, project_type: str, spec_base: str) -> None: - """Write task.json file.""" - today = datetime.now().strftime("%Y-%m-%d") - - # Generate subtasks and related files based on project type - if project_type == "frontend": - subtasks = [ - {"name": "Fill frontend guidelines", "status": "pending"}, - {"name": "Add code examples", "status": "pending"}, - ] - related_files = [f".trellis/{spec_base}/frontend/"] - elif project_type == "backend": - subtasks = [ - {"name": "Fill backend guidelines", "status": "pending"}, - {"name": "Add code examples", "status": "pending"}, - ] - related_files = [f".trellis/{spec_base}/backend/"] - else: # fullstack - subtasks = [ - {"name": "Fill backend guidelines", "status": "pending"}, - {"name": "Fill frontend guidelines", "status": "pending"}, - {"name": "Add code examples", "status": "pending"}, - ] - related_files = [f".trellis/{spec_base}/backend/", f".trellis/{spec_base}/frontend/"] - - task_data = { - "id": TASK_NAME, - "name": "Bootstrap Guidelines", - "description": "Fill in project development guidelines for AI agents", - "status": "in_progress", - "dev_type": "docs", - "priority": "P1", - "creator": developer, - "assignee": developer, - "createdAt": today, - "completedAt": None, - "commit": None, - "subtasks": subtasks, - "children": [], - "parent": None, - "relatedFiles": related_files, - "notes": f"First-time setup task created by trellis init ({project_type} project)", - "meta": {}, - } - - task_json = task_dir / "task.json" - task_json.write_text(json.dumps(task_data, indent=2, ensure_ascii=False), encoding="utf-8") - - -# ============================================================================= -# Main -# ============================================================================= - -def main() -> int: - """Main entry point.""" - # Parse project type argument - project_type = "fullstack" - if len(sys.argv) > 1: - project_type = sys.argv[1] - - # Validate project type - if project_type not in ("frontend", "backend", "fullstack"): - print(f"Unknown project type: {project_type}, defaulting to fullstack") - project_type = "fullstack" - - repo_root = get_repo_root() - developer = get_developer(repo_root) - - # Check developer initialized - if not developer: - print("Error: Developer not initialized") - print(f"Run: python3 ./{DIR_WORKFLOW}/{DIR_SCRIPTS}/init_developer.py <your-name>") - return 1 - - # Resolve spec base path (monorepo: spec/<package>, single-repo: spec) - package = resolve_package(repo_root=repo_root) - spec_base = get_spec_base(package, repo_root) - - tasks_dir = get_tasks_dir(repo_root) - task_dir = tasks_dir / TASK_NAME - relative_path = f"{DIR_WORKFLOW}/{DIR_TASKS}/{TASK_NAME}" - - # Check if already exists - if task_dir.exists(): - print(f"Bootstrap task already exists: {relative_path}") - return 0 - - # Create task directory - task_dir.mkdir(parents=True, exist_ok=True) - - # Write files - write_task_json(task_dir, developer, project_type, spec_base) - write_prd(task_dir, project_type, spec_base) - - # Set as current task - set_current_task(relative_path, repo_root) - - # Silent output - init command handles user-facing messages - # Only output the task path for programmatic use - print(relative_path) - return 0 - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/.trellis/scripts/get_context.py b/.trellis/scripts/get_context.py deleted file mode 100755 index bc634631..00000000 --- a/.trellis/scripts/get_context.py +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env python3 -""" -Get Session Context for AI Agent. - -Usage: - python3 get_context.py Output context in text format - python3 get_context.py --json Output context in JSON format -""" - -from __future__ import annotations - -from common.git_context import main - - -if __name__ == "__main__": - main() diff --git a/.trellis/scripts/get_developer.py b/.trellis/scripts/get_developer.py deleted file mode 100755 index f8a89ebf..00000000 --- a/.trellis/scripts/get_developer.py +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env python3 -""" -Get current developer name. - -This is a wrapper that uses common/paths.py -""" - -from __future__ import annotations - -import sys - -from common.paths import get_developer - - -def main() -> None: - """CLI entry point.""" - developer = get_developer() - if developer: - print(developer) - else: - print("Developer not initialized", file=sys.stderr) - sys.exit(1) - - -if __name__ == "__main__": - main() diff --git a/.trellis/scripts/hooks/linear_sync.py b/.trellis/scripts/hooks/linear_sync.py deleted file mode 100755 index 5659fde9..00000000 --- a/.trellis/scripts/hooks/linear_sync.py +++ /dev/null @@ -1,243 +0,0 @@ -#!/usr/bin/env python3 -"""Linear sync hook for Trellis task lifecycle. - -Syncs task events to Linear via the `linearis` CLI. - -Usage (called automatically by task.py hooks): - python3 .trellis/scripts/hooks/linear_sync.py create - python3 .trellis/scripts/hooks/linear_sync.py start - python3 .trellis/scripts/hooks/linear_sync.py archive - -Manual usage: - TASK_JSON_PATH=.trellis/tasks/<name>/task.json python3 .trellis/scripts/hooks/linear_sync.py sync - -Environment: - TASK_JSON_PATH - Absolute path to task.json (set by task.py) - -Configuration: - .trellis/hooks.local.json - Local config (gitignored), example: - { - "linear": { - "team": "TEAM_KEY", - "project": "Project Name", - "assignees": { - "dev-name": "linear-user-id" - } - } - } -""" - -from __future__ import annotations - -import json -import os -import subprocess -import sys -from pathlib import Path - -# ─── Configuration ──────────────────────────────────────────────────────────── - -# Trellis priority → Linear priority (1=Urgent, 2=High, 3=Medium, 4=Low) -PRIORITY_MAP = {"P0": 1, "P1": 2, "P2": 3, "P3": 4} - -# Linear status names (must match your team's workflow) -STATUS_IN_PROGRESS = "In Progress" -STATUS_DONE = "Done" - - -def _load_config() -> dict: - """Load local hook config from .trellis/hooks.local.json.""" - task_json_path = os.environ.get("TASK_JSON_PATH", "") - if task_json_path: - # Walk up from task.json to find .trellis/ - trellis_dir = Path(task_json_path).parent.parent.parent - else: - trellis_dir = Path(".trellis") - - config_path = trellis_dir / "hooks.local.json" - try: - with open(config_path, encoding="utf-8") as f: - return json.load(f) - except (OSError, json.JSONDecodeError): - return {} - - -CONFIG = _load_config() -LINEAR_CFG = CONFIG.get("linear", {}) - -TEAM = LINEAR_CFG.get("team", "") -PROJECT = LINEAR_CFG.get("project", "") -ASSIGNEE_MAP = LINEAR_CFG.get("assignees", {}) - -# ─── Helpers ────────────────────────────────────────────────────────────────── - - -def _read_task() -> tuple[dict, str]: - path = os.environ.get("TASK_JSON_PATH", "") - if not path: - print("TASK_JSON_PATH not set", file=sys.stderr) - sys.exit(1) - with open(path, encoding="utf-8") as f: - return json.load(f), path - - -def _write_task(data: dict, path: str) -> None: - with open(path, "w", encoding="utf-8") as f: - json.dump(data, f, indent=2, ensure_ascii=False) - f.write("\n") - - -def _linearis(*args: str) -> dict | None: - result = subprocess.run( - ["linearis", *args], - capture_output=True, - text=True, - encoding="utf-8", - errors="replace", - ) - if result.returncode != 0: - print(f"linearis error: {result.stderr.strip()}", file=sys.stderr) - sys.exit(1) - stdout = result.stdout.strip() - if stdout: - return json.loads(stdout) - return None - - -def _get_linear_issue(task: dict) -> str | None: - meta = task.get("meta") - if isinstance(meta, dict): - return meta.get("linear_issue") - return None - - -# ─── Actions ────────────────────────────────────────────────────────────────── - - -def cmd_create() -> None: - if not TEAM: - print("No linear.team configured in hooks.local.json", file=sys.stderr) - sys.exit(1) - - task, path = _read_task() - - # Skip if already linked - if _get_linear_issue(task): - print(f"Already linked: {_get_linear_issue(task)}") - return - - title = task.get("title") or task.get("name") or "Untitled" - args = ["issues", "create", title, "--team", TEAM] - - # Map priority - priority = PRIORITY_MAP.get(task.get("priority", ""), 0) - if priority: - args.extend(["-p", str(priority)]) - - # Set project - if PROJECT: - args.extend(["--project", PROJECT]) - - # Assign to Linear user - assignee = task.get("assignee", "") - linear_user_id = ASSIGNEE_MAP.get(assignee) - if linear_user_id: - args.extend(["--assignee", linear_user_id]) - - # Link to parent's Linear issue if available - parent_issue = _resolve_parent_linear_issue(task) - if parent_issue: - args.extend(["--parent-ticket", parent_issue]) - - result = _linearis(*args) - if result and "identifier" in result: - if not isinstance(task.get("meta"), dict): - task["meta"] = {} - task["meta"]["linear_issue"] = result["identifier"] - _write_task(task, path) - print(f"Created Linear issue: {result['identifier']}") - - -def cmd_start() -> None: - task, _ = _read_task() - issue = _get_linear_issue(task) - if not issue: - return - _linearis("issues", "update", issue, "-s", STATUS_IN_PROGRESS) - print(f"Updated {issue} -> {STATUS_IN_PROGRESS}") - cmd_sync() - - -def cmd_archive() -> None: - task, _ = _read_task() - issue = _get_linear_issue(task) - if not issue: - return - _linearis("issues", "update", issue, "-s", STATUS_DONE) - print(f"Updated {issue} -> {STATUS_DONE}") - - -def cmd_sync() -> None: - """Sync prd.md content to Linear issue description.""" - task, _ = _read_task() - issue = _get_linear_issue(task) - if not issue: - print("No linear_issue in meta, run create first", file=sys.stderr) - sys.exit(1) - - # Find prd.md next to task.json - task_json_path = os.environ.get("TASK_JSON_PATH", "") - prd_path = Path(task_json_path).parent / "prd.md" - if not prd_path.is_file(): - print(f"No prd.md found at {prd_path}", file=sys.stderr) - sys.exit(1) - - description = prd_path.read_text(encoding="utf-8").strip() - _linearis("issues", "update", issue, "-d", description) - print(f"Synced prd.md to {issue} description") - - -# ─── Parent Issue Resolution ───────────────────────────────────────────────── - - -def _resolve_parent_linear_issue(task: dict) -> str | None: - """Find parent task's Linear issue identifier.""" - parent_name = task.get("parent") - if not parent_name: - return None - - task_json_path = os.environ.get("TASK_JSON_PATH", "") - if not task_json_path: - return None - - current_task_dir = Path(task_json_path).parent - tasks_dir = current_task_dir.parent - parent_json = tasks_dir / parent_name / "task.json" - - if parent_json.exists(): - try: - with open(parent_json, encoding="utf-8") as f: - parent_task = json.load(f) - return _get_linear_issue(parent_task) - except (json.JSONDecodeError, OSError): - pass - return None - - -# ─── Main ───────────────────────────────────────────────────────────────────── - -if __name__ == "__main__": - action = sys.argv[1] if len(sys.argv) > 1 else "" - actions = { - "create": cmd_create, - "start": cmd_start, - "archive": cmd_archive, - "sync": cmd_sync, - } - fn = actions.get(action) - if fn: - fn() - else: - print(f"Unknown action: {action}", file=sys.stderr) - print(f"Valid actions: {', '.join(actions)}", file=sys.stderr) - sys.exit(1) diff --git a/.trellis/scripts/init_developer.py b/.trellis/scripts/init_developer.py deleted file mode 100755 index 9fb53f5c..00000000 --- a/.trellis/scripts/init_developer.py +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env python3 -""" -Initialize developer for workflow. - -Usage: - python3 init_developer.py <developer-name> - -This creates: - - .trellis/.developer file with developer info - - .trellis/workspace/<name>/ directory structure -""" - -from __future__ import annotations - -import sys - -from common.paths import ( - DIR_WORKFLOW, - FILE_DEVELOPER, - get_developer, -) -from common.developer import init_developer - - -def main() -> None: - """CLI entry point.""" - if len(sys.argv) < 2: - print(f"Usage: {sys.argv[0]} <developer-name>") - print() - print("Example:") - print(f" {sys.argv[0]} john") - sys.exit(1) - - name = sys.argv[1] - - # Check if already initialized - existing = get_developer() - if existing: - print(f"Developer already initialized: {existing}") - print() - print(f"To reinitialize, remove {DIR_WORKFLOW}/{FILE_DEVELOPER} first") - sys.exit(0) - - if init_developer(name): - sys.exit(0) - else: - sys.exit(1) - - -if __name__ == "__main__": - main() diff --git a/.trellis/scripts/multi_agent/__init__.py b/.trellis/scripts/multi_agent/__init__.py deleted file mode 100755 index c7c7e7dd..00000000 --- a/.trellis/scripts/multi_agent/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -""" -Multi-Agent Pipeline Scripts. - -This module provides orchestration for multi-agent workflows. -""" diff --git a/.trellis/scripts/multi_agent/_bootstrap.py b/.trellis/scripts/multi_agent/_bootstrap.py deleted file mode 100755 index bba60614..00000000 --- a/.trellis/scripts/multi_agent/_bootstrap.py +++ /dev/null @@ -1,17 +0,0 @@ -"""Bootstrap path setup for multi_agent scripts. - -Import this module before importing from common/: - - import _bootstrap # noqa: F401 - -This adds the parent scripts/ directory to sys.path so that -`from common.xxx import yyy` works when running scripts directly -via `python3 .trellis/scripts/multi_agent/some_script.py`. -""" - -import sys -from pathlib import Path - -_scripts_dir = str(Path(__file__).resolve().parent.parent) -if _scripts_dir not in sys.path: - sys.path.insert(0, _scripts_dir) diff --git a/.trellis/scripts/multi_agent/cleanup.py b/.trellis/scripts/multi_agent/cleanup.py deleted file mode 100755 index 0ed2588c..00000000 --- a/.trellis/scripts/multi_agent/cleanup.py +++ /dev/null @@ -1,398 +0,0 @@ -#!/usr/bin/env python3 -""" -Multi-Agent Pipeline: Cleanup Worktree. - -Usage: - python3 cleanup.py <branch-name> Remove specific worktree - python3 cleanup.py --list List all worktrees - python3 cleanup.py --merged Remove merged worktrees - python3 cleanup.py --all Remove all worktrees (with confirmation) - -Options: - -y, --yes Skip confirmation prompts - --keep-branch Don't delete the git branch - -This script: -1. Archives task directory to archive/{YYYY-MM}/ -2. Removes agent from registry -3. Removes git worktree -4. Optionally deletes git branch -""" - -from __future__ import annotations - -import argparse -import json -import shutil -import subprocess -import sys -from pathlib import Path - -import _bootstrap # noqa: F401 — adds parent scripts/ dir to sys.path - -from common.git import run_git -from common.log import Colors, log_info, log_success, log_warn, log_error -from common.paths import FILE_TASK_JSON, get_repo_root -from common.registry import ( - registry_get_file, - registry_get_task_dir, - registry_remove_by_id, - registry_remove_by_worktree, - registry_search_agent, -) -from common.task_utils import ( - archive_task_complete, - is_safe_task_path, -) - -# Colors, log_info, log_success, log_warn, log_error -# are now imported from common.log above. - - -def confirm(prompt: str, skip_confirm: bool) -> bool: - """Ask for confirmation.""" - if skip_confirm: - return True - - if not sys.stdin.isatty(): - log_error("Non-interactive mode detected. Use -y to skip confirmation.") - return False - - response = input(f"{prompt} [y/N] ") - return response.lower() in ("y", "yes") - - -def _warn_submodule_prs(task_dir_abs: Path) -> None: - """Print reminders for any open submodule PRs found in task.json.""" - task_json = task_dir_abs / FILE_TASK_JSON - if not task_json.is_file(): - return - - try: - task_data = json.loads(task_json.read_text(encoding="utf-8")) - except (json.JSONDecodeError, OSError): - return - - submodule_prs = task_data.get("submodule_prs") - if not isinstance(submodule_prs, dict) or not submodule_prs: - return - - for name, url in submodule_prs.items(): - log_warn(f"Submodule PR still open: {name} -> {url}") - log_info("Remember to close/merge submodule PRs before cleanup") - - -# ============================================================================= -# Commands -# ============================================================================= - - -def cmd_list(repo_root: Path) -> int: - """List worktrees.""" - print(f"{Colors.BLUE}=== Git Worktrees ==={Colors.NC}") - print() - - subprocess.run(["git", "worktree", "list"], cwd=repo_root) - print() - - # Show registry info - registry_file = registry_get_file(repo_root) - if registry_file and registry_file.is_file(): - print(f"{Colors.BLUE}=== Registered Agents ==={Colors.NC}") - print() - - data = json.loads(registry_file.read_text(encoding="utf-8")) - agents = data.get("agents", []) - - if agents: - for agent in agents: - print( - f" {agent.get('id', '?')}: PID={agent.get('pid', '?')} [{agent.get('worktree_path', '?')}]" - ) - else: - print(" (none)") - print() - - return 0 - - -def archive_task(worktree_path: str, repo_root: Path) -> None: - """Archive task directory.""" - task_dir = registry_get_task_dir(worktree_path, repo_root) - - if not task_dir or not is_safe_task_path(task_dir, repo_root): - return - - task_dir_abs = repo_root / task_dir - if not task_dir_abs.is_dir(): - return - - result = archive_task_complete(task_dir_abs, repo_root) - if "archived_to" in result: - dest = Path(result["archived_to"]) - log_success(f"Archived task: {dest.name} -> archive/{dest.parent.name}/") - - -def cleanup_registry_only(search: str, repo_root: Path, skip_confirm: bool) -> int: - """Cleanup from registry only (no worktree).""" - agent_info = registry_search_agent(search, repo_root) - - if not agent_info: - log_error(f"No agent found in registry matching: {search}") - return 1 - - agent_id = agent_info.get("id", "?") - task_dir = agent_info.get("task_dir", "?") - - print() - print(f"{Colors.BLUE}=== Cleanup Agent (no worktree) ==={Colors.NC}") - print(f" Agent ID: {agent_id}") - print(f" Task Dir: {task_dir}") - print() - - if not confirm("Archive task and remove from registry?", skip_confirm): - log_info("Aborted") - return 0 - - # Check for submodule PRs and archive task directory - if task_dir and is_safe_task_path(task_dir, repo_root): - task_dir_abs = repo_root / task_dir - if task_dir_abs.is_dir(): - _warn_submodule_prs(task_dir_abs) - result = archive_task_complete(task_dir_abs, repo_root) - if "archived_to" in result: - dest = Path(result["archived_to"]) - log_success( - f"Archived task: {dest.name} -> archive/{dest.parent.name}/" - ) - else: - log_warn("Invalid task_dir in registry, skipping archive") - - # Remove from registry - registry_remove_by_id(agent_id, repo_root) - log_success(f"Removed from registry: {agent_id}") - - log_success("Cleanup complete") - return 0 - - -def cleanup_worktree( - branch: str, repo_root: Path, skip_confirm: bool, keep_branch: bool -) -> int: - """Cleanup single worktree.""" - # Find worktree path for branch - _, worktree_list, _ = run_git( - ["worktree", "list", "--porcelain"], cwd=repo_root - ) - - worktree_path = None - current_worktree = None - - for line in worktree_list.splitlines(): - if line.startswith("worktree "): - current_worktree = line[9:] # Remove "worktree " prefix - elif line.startswith("branch refs/heads/"): - current_branch = line[18:] # Remove "branch refs/heads/" prefix - if current_branch == branch: - worktree_path = current_worktree - break - - if not worktree_path: - # No worktree found, try to cleanup from registry only - log_warn(f"No worktree found for: {branch}") - log_info("Trying to cleanup from registry...") - return cleanup_registry_only(branch, repo_root, skip_confirm) - - print() - print(f"{Colors.BLUE}=== Cleanup Worktree ==={Colors.NC}") - print(f" Branch: {branch}") - print(f" Worktree: {worktree_path}") - print() - - if not confirm("Remove this worktree?", skip_confirm): - log_info("Aborted") - return 0 - - # 1. Archive task (and check for submodule PRs) - task_dir = registry_get_task_dir(worktree_path, repo_root) - if task_dir and is_safe_task_path(task_dir, repo_root): - task_dir_abs_for_warn = repo_root / task_dir - if task_dir_abs_for_warn.is_dir(): - _warn_submodule_prs(task_dir_abs_for_warn) - archive_task(worktree_path, repo_root) - - # 2. Remove from registry - registry_remove_by_worktree(worktree_path, repo_root) - log_info("Removed from registry") - - # 3. Remove worktree - log_info("Removing worktree...") - ret, _, _ = run_git( - ["worktree", "remove", worktree_path, "--force"], cwd=repo_root - ) - if ret != 0: - # Try removing directory manually - try: - shutil.rmtree(worktree_path) - except Exception as e: - log_error(f"Failed to remove worktree: {e}") - - log_success("Worktree removed") - - # 4. Delete branch (optional) - if not keep_branch: - log_info("Deleting branch...") - ret, _, _ = run_git(["branch", "-D", branch], cwd=repo_root) - if ret != 0: - log_warn("Could not delete branch (may be checked out elsewhere)") - - log_success(f"Cleanup complete for: {branch}") - return 0 - - -def cmd_merged(repo_root: Path, skip_confirm: bool, keep_branch: bool) -> int: - """Cleanup merged worktrees.""" - # Get main branch - _, head_out, _ = run_git( - ["symbolic-ref", "refs/remotes/origin/HEAD"], cwd=repo_root - ) - main_branch = head_out.strip().replace("refs/remotes/origin/", "") or "main" - - print(f"{Colors.BLUE}=== Finding Merged Worktrees ==={Colors.NC}") - print() - - # Get merged branches - _, merged_out, _ = run_git( - ["branch", "--merged", main_branch], cwd=repo_root - ) - merged_branches = [] - for line in merged_out.splitlines(): - branch = line.strip().lstrip("* ") - if branch and branch != main_branch: - merged_branches.append(branch) - - if not merged_branches: - log_info("No merged branches found") - return 0 - - # Get worktree list - _, worktree_list, _ = run_git(["worktree", "list"], cwd=repo_root) - - worktree_branches = [] - for branch in merged_branches: - if f"[{branch}]" in worktree_list: - worktree_branches.append(branch) - print(f" - {branch}") - - if not worktree_branches: - log_info("No merged worktrees found") - return 0 - - print() - if not confirm("Remove these merged worktrees?", skip_confirm): - log_info("Aborted") - return 0 - - for branch in worktree_branches: - cleanup_worktree(branch, repo_root, True, keep_branch) - - return 0 - - -def cmd_all(repo_root: Path, skip_confirm: bool, keep_branch: bool) -> int: - """Cleanup all worktrees.""" - print(f"{Colors.BLUE}=== All Worktrees ==={Colors.NC}") - print() - - # Get worktree list - _, worktree_list, _ = run_git( - ["worktree", "list", "--porcelain"], cwd=repo_root - ) - - worktrees = [] - main_worktree = str(repo_root.resolve()) - - for line in worktree_list.splitlines(): - if line.startswith("worktree "): - wt = line[9:] - if wt != main_worktree: - worktrees.append(wt) - - if not worktrees: - log_info("No worktrees to remove") - return 0 - - for wt in worktrees: - print(f" - {wt}") - - print() - print(f"{Colors.RED}WARNING: This will remove ALL worktrees!{Colors.NC}") - - if not confirm("Are you sure?", skip_confirm): - log_info("Aborted") - return 0 - - # Get branch for each worktree - for wt in worktrees: - # Find branch name from worktree list - _, wt_list, _ = run_git(["worktree", "list"], cwd=repo_root) - for line in wt_list.splitlines(): - if wt in line: - # Extract branch from [branch] format - import re - - match = re.search(r"\[([^\]]+)\]", line) - if match: - branch = match.group(1) - cleanup_worktree(branch, repo_root, True, keep_branch) - break - - return 0 - - -# ============================================================================= -# Main -# ============================================================================= - - -def main() -> int: - """Main entry point.""" - parser = argparse.ArgumentParser( - description="Multi-Agent Pipeline: Cleanup Worktree" - ) - parser.add_argument("branch", nargs="?", help="Branch name to cleanup") - parser.add_argument("-y", "--yes", action="store_true", help="Skip confirmation") - parser.add_argument( - "--keep-branch", action="store_true", help="Don't delete git branch" - ) - parser.add_argument("--list", action="store_true", help="List all worktrees") - parser.add_argument("--merged", action="store_true", help="Remove merged worktrees") - parser.add_argument("--all", action="store_true", help="Remove all worktrees") - - args = parser.parse_args() - repo_root = get_repo_root() - - if args.list: - return cmd_list(repo_root) - elif args.merged: - return cmd_merged(repo_root, args.yes, args.keep_branch) - elif args.all: - return cmd_all(repo_root, args.yes, args.keep_branch) - elif args.branch: - return cleanup_worktree(args.branch, repo_root, args.yes, args.keep_branch) - else: - print("""Usage: - python3 cleanup.py <branch-name> Remove specific worktree - python3 cleanup.py --list List all worktrees - python3 cleanup.py --merged Remove merged worktrees - python3 cleanup.py --all Remove all worktrees - -Options: - -y, --yes Skip confirmation - --keep-branch Don't delete git branch -""") - return 1 - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/.trellis/scripts/multi_agent/create_pr.py b/.trellis/scripts/multi_agent/create_pr.py deleted file mode 100755 index 0028548b..00000000 --- a/.trellis/scripts/multi_agent/create_pr.py +++ /dev/null @@ -1,620 +0,0 @@ -#!/usr/bin/env python3 -""" -Multi-Agent Pipeline: Create PR. - -Usage: - python3 create_pr.py [task-dir] [--dry-run] - -This script: -1. Handles submodule changes (commit, push, PR) if any submodules are configured -2. Stages and commits all main-repo changes (excluding workspace/) -3. Pushes to origin -4. Creates a Draft PR using `gh pr create` -5. Updates task.json with status="completed", pr_url, submodule_prs, and current_phase - -Note: This is the only action that performs git commit, as it's the final -step after all implementation and checks are complete. -""" - -from __future__ import annotations - -import argparse -import subprocess -import sys -from pathlib import Path - -import _bootstrap # noqa: F401 — adds parent scripts/ dir to sys.path - -from common.config import get_submodule_packages -from common.git import run_git -from common.io import read_json, write_json -from common.log import Colors -from common.paths import ( - DIR_WORKFLOW, - FILE_TASK_JSON, - get_current_task, - get_repo_root, -) -from common.phase import get_phase_for_action - -# Colors, read_json, write_json -# are now imported from common.log and common.io above. - - -# ============================================================================= -# Submodule PR Helpers -# ============================================================================= - -# Warning message prepended to main PR body when submodule PRs exist -_SUBMODULE_SQUASH_WARNING_MARKER = ( - "Merge submodule PR(s) first. If squash-merged, update submodule ref after merge." -) - - -def _get_submodule_default_branch(submodule_abs: Path) -> str: - """Get the default branch of a submodule repository. - - Uses `git symbolic-ref refs/remotes/origin/HEAD` for portability - (no grep, no English-dependent output). - - Returns: - Default branch name (e.g. "main"), falls back to "main" on failure. - """ - ret, out, _ = run_git( - ["symbolic-ref", "refs/remotes/origin/HEAD"], cwd=submodule_abs - ) - if ret == 0 and out.strip(): - # Output: "refs/remotes/origin/main" -> "main" - ref = out.strip() - prefix = "refs/remotes/origin/" - if ref.startswith(prefix): - return ref[len(prefix):] - return "main" - - -def _process_submodule_changes( - repo_root: Path, - current_branch: str, - commit_prefix: str, - scope: str, - task_name: str, - task_data: dict, - task_json: Path, - dry_run: bool, -) -> tuple[dict[str, str], list[str], bool]: - """Process submodule changes: commit, push, create PRs. - - Returns: - Tuple of (submodule_prs dict, changed_submodule_paths list, success bool). - On failure, submodule_prs contains URLs persisted so far. - """ - submodule_packages = get_submodule_packages(repo_root) - if not submodule_packages: - return {}, [], True - - # Load existing submodule_prs for incremental merge - raw_prs = task_data.get("submodule_prs") - submodule_prs: dict[str, str] = dict(raw_prs) if isinstance(raw_prs, dict) else {} - - # Detect which submodules have changes - changed: list[tuple[str, str]] = [] # (name, path) - for pkg_name, pkg_path in submodule_packages.items(): - sub_abs = repo_root / pkg_path - if not sub_abs.is_dir(): - continue - - ret, status_out, _ = run_git( - ["status", "--porcelain"], cwd=sub_abs - ) - if ret != 0: - continue - if status_out.strip(): - changed.append((pkg_name, pkg_path)) - - if not changed: - return submodule_prs, [], True - - # Determine submodule branch name: <repo-dir-name>/<main-branch> - repo_dir_name = repo_root.name - sub_branch = f"{repo_dir_name}/{current_branch}" - - print(f"\n{Colors.BLUE}=== Submodule Changes Detected ==={Colors.NC}") - for pkg_name, pkg_path in changed: - print(f" - {pkg_name} ({pkg_path})") - print() - - changed_paths: list[str] = [] - - for pkg_name, pkg_path in changed: - sub_abs = repo_root / pkg_path - sub_base = _get_submodule_default_branch(sub_abs) - sub_commit_msg = f"{commit_prefix}({scope}): {task_name}" - - print(f"{Colors.YELLOW}Processing submodule: {pkg_name} ({pkg_path}){Colors.NC}") - print(f" Submodule base branch: {sub_base}") - print(f" Submodule branch: {sub_branch}") - - if dry_run: - print(f" [DRY-RUN] Would checkout branch: {sub_branch}") - print(f" [DRY-RUN] Would commit: {sub_commit_msg}") - print(f" [DRY-RUN] Would push to: origin/{sub_branch}") - print(f" [DRY-RUN] Would create PR: {sub_branch} -> {sub_base}") - submodule_prs[pkg_name] = "https://github.com/example/repo/pull/DRY-RUN" - changed_paths.append(pkg_path) - continue - - # --- Checkout or create branch in submodule --- - ret, _, _ = run_git( - ["show-ref", "--verify", "--quiet", f"refs/heads/{sub_branch}"], - cwd=sub_abs, - ) - if ret == 0: - # Branch exists, checkout - ret, _, err = run_git( - ["checkout", sub_branch], cwd=sub_abs - ) - if ret != 0: - print(f"{Colors.RED}Failed to checkout branch in {pkg_name}: {err}{Colors.NC}") - return submodule_prs, changed_paths, False - - # Check for divergence (reuse risk) - ret_anc, _, _ = run_git( - ["merge-base", "--is-ancestor", sub_base, sub_branch], - cwd=sub_abs, - ) - if ret_anc != 0: - print( - f" {Colors.YELLOW}[WARN] submodule branch has diverged history, " - f"consider recreating{Colors.NC}" - ) - else: - # Create new branch - ret, _, err = run_git( - ["checkout", "-b", sub_branch], cwd=sub_abs - ) - if ret != 0: - print(f"{Colors.RED}Failed to create branch in {pkg_name}: {err}{Colors.NC}") - return submodule_prs, changed_paths, False - - # --- Stage and commit --- - run_git(["add", "-A"], cwd=sub_abs) - - ret, _, _ = run_git(["diff", "--cached", "--quiet"], cwd=sub_abs) - if ret != 0: - # Has staged changes - ret, _, err = run_git( - ["commit", "-m", sub_commit_msg], cwd=sub_abs - ) - if ret != 0: - print(f"{Colors.RED}Failed to commit in {pkg_name}: {err}{Colors.NC}") - return submodule_prs, changed_paths, False - print(f" {Colors.GREEN}Committed in {pkg_name}{Colors.NC}") - else: - print(f" No staged changes in {pkg_name}, skipping commit") - - # --- Push --- - ret, _, err = run_git( - ["push", "-u", "origin", sub_branch], cwd=sub_abs - ) - if ret != 0: - print(f"{Colors.RED}Failed to push {pkg_name}: {err}{Colors.NC}") - return submodule_prs, changed_paths, False - print(f" {Colors.GREEN}Pushed {pkg_name} to origin/{sub_branch}{Colors.NC}") - - # --- Create or reuse PR --- - result = subprocess.run( - [ - "gh", "pr", "list", - "--head", sub_branch, - "--base", sub_base, - "--json", "url", - "--jq", ".[0].url", - ], - capture_output=True, - text=True, - encoding="utf-8", - errors="replace", - cwd=str(sub_abs), - ) - existing_sub_pr = result.stdout.strip() - - if existing_sub_pr: - print(f" {Colors.YELLOW}PR already exists: {existing_sub_pr}{Colors.NC}") - sub_pr_url = existing_sub_pr - else: - result = subprocess.run( - [ - "gh", "pr", "create", - "--draft", - "--base", sub_base, - "--title", f"{commit_prefix}({scope}): {task_name} [{pkg_name}]", - "--body", f"Submodule changes for {task_name}", - ], - capture_output=True, - text=True, - encoding="utf-8", - errors="replace", - cwd=str(sub_abs), - ) - if result.returncode != 0: - print( - f"{Colors.RED}Failed to create PR for {pkg_name}: " - f"{result.stderr}{Colors.NC}" - ) - return submodule_prs, changed_paths, False - - sub_pr_url = result.stdout.strip() - print(f" {Colors.GREEN}PR created for {pkg_name}: {sub_pr_url}{Colors.NC}") - - # Persist immediately (incremental, supports re-entry) - submodule_prs[pkg_name] = sub_pr_url - task_data["submodule_prs"] = submodule_prs - write_json(task_json, task_data) - - changed_paths.append(pkg_path) - - return submodule_prs, changed_paths, True - - -def _build_submodule_warning(submodule_prs: dict[str, str]) -> str: - """Build the squash-merge warning block for the main PR body.""" - pr_lines = "\n".join(f"> - {name}: {url}" for name, url in submodule_prs.items()) - return ( - f"> {_SUBMODULE_SQUASH_WARNING_MARKER}\n" - f">\n" - f"> Submodule PRs:\n" - f"{pr_lines}\n" - f"\n---\n\n" - ) - - -def _ensure_submodule_warning_on_existing_pr( - submodule_prs: dict[str, str], - dry_run: bool, -) -> None: - """Read-modify-write: add squash warning to existing PR if missing.""" - if dry_run: - print("[DRY-RUN] Would check/add submodule warning to existing PR") - return - - # Read current PR body - result = subprocess.run( - [ - "gh", "pr", "view", - "--json", "body", - "--jq", ".body", - ], - capture_output=True, - text=True, - encoding="utf-8", - errors="replace", - ) - if result.returncode != 0: - return - - current_body = result.stdout.strip() - if _SUBMODULE_SQUASH_WARNING_MARKER in current_body: - return # Warning already present - - # Prepend warning to existing body - warning = _build_submodule_warning(submodule_prs) - new_body = warning + current_body - - subprocess.run( - ["gh", "pr", "edit", "--body", new_body], - capture_output=True, - text=True, - encoding="utf-8", - errors="replace", - ) - print(f" {Colors.GREEN}Added submodule merge warning to existing PR{Colors.NC}") - - -# ============================================================================= -# Main -# ============================================================================= - - -def main() -> int: - """Main entry point.""" - parser = argparse.ArgumentParser(description="Multi-Agent Pipeline: Create PR") - parser.add_argument("dir", nargs="?", help="Task directory") - parser.add_argument( - "--dry-run", action="store_true", help="Show what would be done" - ) - - args = parser.parse_args() - repo_root = get_repo_root() - - # ============================================================================= - # Get Task Directory - # ============================================================================= - target_dir = args.dir - if not target_dir: - # Try to get from .current-task - current_task = get_current_task(repo_root) - if current_task: - target_dir = current_task - - if not target_dir: - print( - f"{Colors.RED}Error: No task directory specified and no current task set{Colors.NC}" - ) - print("Usage: python3 create_pr.py [task-dir] [--dry-run]") - return 1 - - # Support relative paths - if not target_dir.startswith("/"): - target_dir_path = repo_root / target_dir - else: - target_dir_path = Path(target_dir) - - task_json = target_dir_path / FILE_TASK_JSON - if not task_json.is_file(): - print(f"{Colors.RED}Error: task.json not found at {target_dir_path}{Colors.NC}") - return 1 - - # ============================================================================= - # Main - # ============================================================================= - print(f"{Colors.BLUE}=== Create PR ==={Colors.NC}") - if args.dry_run: - print( - f"{Colors.YELLOW}[DRY-RUN MODE] No actual changes will be made{Colors.NC}" - ) - print() - - # Read task config - task_data = read_json(task_json) - if not task_data: - print(f"{Colors.RED}Error: Failed to read task.json{Colors.NC}") - return 1 - - task_name = task_data.get("name", "") - base_branch = task_data.get("base_branch", "main") - scope = task_data.get("scope", "core") - dev_type = task_data.get("dev_type", "feature") - - # Map dev_type to commit prefix - prefix_map = { - "feature": "feat", - "frontend": "feat", - "backend": "feat", - "fullstack": "feat", - "bugfix": "fix", - "fix": "fix", - "refactor": "refactor", - "docs": "docs", - "test": "test", - } - commit_prefix = prefix_map.get(dev_type, "feat") - - print(f"Task: {task_name}") - print(f"Base branch: {base_branch}") - print(f"Scope: {scope}") - print(f"Commit prefix: {commit_prefix}") - print() - - # Get current branch - _, branch_out, _ = run_git(["branch", "--show-current"]) - current_branch = branch_out.strip() - print(f"Current branch: {current_branch}") - - # ============================================================================= - # Submodule PR Flow (runs BEFORE main repo staging) - # ============================================================================= - submodule_prs, changed_submodule_paths, sub_success = _process_submodule_changes( - repo_root=repo_root, - current_branch=current_branch, - commit_prefix=commit_prefix, - scope=scope, - task_name=task_name, - task_data=task_data, - task_json=task_json, - dry_run=args.dry_run, - ) - - if not sub_success: - print( - f"\n{Colors.RED}Submodule PR flow failed. " - f"Skipping main repo commit/PR.{Colors.NC}" - ) - print("Already-created submodule PRs have been saved to task.json.") - return 1 - - # ============================================================================= - # Main Repo: Stage, Commit, Push, PR - # ============================================================================= - - # Check for changes - print(f"{Colors.YELLOW}Checking for changes...{Colors.NC}") - - # Stage changes - run_git(["add", "-A"]) - - # Exclude workspace and temp files - run_git(["reset", f"{DIR_WORKFLOW}/workspace/"]) - run_git(["reset", ".agent-log", ".session-id"]) - - # If submodules changed, ensure their ref updates are staged - for sub_path in changed_submodule_paths: - run_git(["add", sub_path]) - - # Check if there are staged changes - ret, _, _ = run_git(["diff", "--cached", "--quiet"]) - has_staged_changes = ret != 0 - - if not has_staged_changes: - print(f"{Colors.YELLOW}No staged changes to commit{Colors.NC}") - - # Check for unpushed commits - ret, log_out, _ = run_git( - ["log", f"origin/{current_branch}..HEAD", "--oneline"] - ) - unpushed = len([line for line in log_out.splitlines() if line.strip()]) - - if unpushed == 0: - if args.dry_run: - run_git(["reset", "HEAD"]) - print(f"{Colors.RED}No changes to create PR{Colors.NC}") - return 1 - - print(f"Found {unpushed} unpushed commit(s)") - else: - # Commit changes - print(f"{Colors.YELLOW}Committing changes...{Colors.NC}") - commit_msg = f"{commit_prefix}({scope}): {task_name}" - - if args.dry_run: - print(f"[DRY-RUN] Would commit with message: {commit_msg}") - print("[DRY-RUN] Staged files:") - _, staged_out, _ = run_git(["diff", "--cached", "--name-only"]) - for line in staged_out.splitlines(): - print(f" - {line}") - else: - run_git(["commit", "-m", commit_msg]) - print(f"{Colors.GREEN}Committed: {commit_msg}{Colors.NC}") - - # Push to remote - print(f"{Colors.YELLOW}Pushing to remote...{Colors.NC}") - if args.dry_run: - print(f"[DRY-RUN] Would push to: origin/{current_branch}") - else: - ret, _, err = run_git(["push", "-u", "origin", current_branch]) - if ret != 0: - print(f"{Colors.RED}Failed to push: {err}{Colors.NC}") - return 1 - print(f"{Colors.GREEN}Pushed to origin/{current_branch}{Colors.NC}") - - # Create PR - print(f"{Colors.YELLOW}Creating PR...{Colors.NC}") - pr_title = f"{commit_prefix}({scope}): {task_name}" - pr_url = "" - - # Build PR body with optional submodule warning - has_submodule_prs = bool(submodule_prs) - - if args.dry_run: - print("[DRY-RUN] Would create PR:") - print(f" Title: {pr_title}") - print(f" Base: {base_branch}") - print(f" Head: {current_branch}") - prd_file = target_dir_path / "prd.md" - if prd_file.is_file(): - print(" Body: (from prd.md)") - if has_submodule_prs: - print(" Body includes submodule merge warning") - pr_url = "https://github.com/example/repo/pull/DRY-RUN" - else: - # Check if PR already exists - result = subprocess.run( - [ - "gh", - "pr", - "list", - "--head", - current_branch, - "--base", - base_branch, - "--json", - "url", - "--jq", - ".[0].url", - ], - capture_output=True, - text=True, - encoding="utf-8", - errors="replace", - ) - existing_pr = result.stdout.strip() - - if existing_pr: - print(f"{Colors.YELLOW}PR already exists: {existing_pr}{Colors.NC}") - pr_url = existing_pr - - # Read-modify-write: add submodule warning if missing - if has_submodule_prs: - _ensure_submodule_warning_on_existing_pr( - submodule_prs, args.dry_run - ) - else: - # Read PRD as PR body - pr_body = "" - prd_file = target_dir_path / "prd.md" - if prd_file.is_file(): - pr_body = prd_file.read_text(encoding="utf-8") - - # Prepend submodule warning if applicable - if has_submodule_prs: - pr_body = _build_submodule_warning(submodule_prs) + pr_body - - # Create PR - result = subprocess.run( - [ - "gh", - "pr", - "create", - "--draft", - "--base", - base_branch, - "--title", - pr_title, - "--body", - pr_body, - ], - capture_output=True, - text=True, - encoding="utf-8", - errors="replace", - ) - - if result.returncode != 0: - print(f"{Colors.RED}Failed to create PR: {result.stderr}{Colors.NC}") - return 1 - - pr_url = result.stdout.strip() - print(f"{Colors.GREEN}PR created: {pr_url}{Colors.NC}") - - # Update task.json - print(f"{Colors.YELLOW}Updating task status...{Colors.NC}") - if args.dry_run: - print("[DRY-RUN] Would update task.json:") - print(" status: completed") - print(f" pr_url: {pr_url}") - if has_submodule_prs: - print(f" submodule_prs: {submodule_prs}") - print(" current_phase: (set to create-pr phase)") - else: - # Get the phase number for create-pr action - create_pr_phase = get_phase_for_action(task_json, "create-pr") - if not create_pr_phase: - create_pr_phase = 4 # Default fallback - - task_data["status"] = "completed" - task_data["pr_url"] = pr_url - task_data["current_phase"] = create_pr_phase - if has_submodule_prs: - task_data["submodule_prs"] = submodule_prs - - write_json(task_json, task_data) - print( - f"{Colors.GREEN}Task status updated to 'completed', phase {create_pr_phase}{Colors.NC}" - ) - - # In dry-run, reset the staging area - if args.dry_run: - run_git(["reset", "HEAD"]) - - print() - print(f"{Colors.GREEN}=== PR Created Successfully ==={Colors.NC}") - print(f"PR URL: {pr_url}") - if has_submodule_prs: - print("Submodule PRs:") - for name, url in submodule_prs.items(): - print(f" - {name}: {url}") - - return 0 - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/.trellis/scripts/multi_agent/plan.py b/.trellis/scripts/multi_agent/plan.py deleted file mode 100755 index 7a76ba8d..00000000 --- a/.trellis/scripts/multi_agent/plan.py +++ /dev/null @@ -1,213 +0,0 @@ -#!/usr/bin/env python3 -""" -Multi-Agent Pipeline: Plan Agent Launcher. - -Usage: python3 plan.py --name <task-name> --type <dev-type> --requirement "<requirement>" - -This script: -1. Creates task directory -2. Starts Plan Agent in background -3. Plan Agent produces fully configured task directory - -After completion, use start.py to launch the Dispatch Agent. - -Prerequisites: - - agents/plan.md must exist (in .claude/, .cursor/, .iflow/, or .opencode/) - - Developer must be initialized -""" - -from __future__ import annotations - -import argparse -import os -import subprocess -import sys -from pathlib import Path - -import _bootstrap # noqa: F401 — adds parent scripts/ dir to sys.path - -from common.cli_adapter import get_cli_adapter -from common.log import Colors, log_info, log_success, log_error -from common.paths import get_repo_root -from common.developer import ensure_developer - - -# ============================================================================= -# Constants -# ============================================================================= - -DEFAULT_PLATFORM = "claude" - - -# ============================================================================= -# Main -# ============================================================================= - -def main() -> int: - """Main entry point.""" - parser = argparse.ArgumentParser( - description="Multi-Agent Pipeline: Plan Agent Launcher" - ) - parser.add_argument("--name", "-n", required=True, help="Task name (e.g., user-auth)") - parser.add_argument("--type", "-t", required=True, help="Dev type: backend|frontend|fullstack") - parser.add_argument("--requirement", "-r", required=True, help="Requirement description") - parser.add_argument( - "--platform", "-p", - choices=["claude", "cursor", "iflow", "opencode", "codex", "qoder"], - default=DEFAULT_PLATFORM, - help="Platform to use (default: claude)" - ) - - args = parser.parse_args() - - task_name = args.name - dev_type = args.type - requirement = args.requirement - platform = args.platform - - # Initialize CLI adapter - adapter = get_cli_adapter(platform) - - # Validate dev type - if dev_type not in ("backend", "frontend", "fullstack"): - log_error(f"Invalid dev type: {dev_type} (must be: backend, frontend, fullstack)") - return 1 - - project_root = get_repo_root() - - # Check plan agent exists (path varies by platform) - if adapter.requires_agent_definition_file: - plan_md = adapter.get_agent_path("plan", project_root) - if not plan_md.is_file(): - log_error(f"Agent definition not found at {plan_md}") - log_info(f"Platform: {platform}") - return 1 - - ensure_developer(project_root) - - # ============================================================================= - # Step 1: Create Task Directory - # ============================================================================= - print() - print(f"{Colors.BLUE}=== Multi-Agent Pipeline: Plan ==={Colors.NC}") - log_info(f"Task: {task_name}") - log_info(f"Type: {dev_type}") - log_info(f"Requirement: {requirement}") - print() - - log_info("Step 1: Creating task directory...") - - # Import task module to create task - from task import cmd_create - import argparse as ap - - # Create task using task.py's create command - create_args = ap.Namespace( - title=requirement, - slug=task_name, - assignee=None, - priority="P2", - description="" - ) - - # Capture stdout to get task dir - import io - from contextlib import redirect_stdout - - stdout_capture = io.StringIO() - with redirect_stdout(stdout_capture): - ret = cmd_create(create_args) - - if ret != 0: - log_error("Failed to create task directory") - return 1 - - task_dir = stdout_capture.getvalue().strip().split("\n")[-1] - task_dir_abs = project_root / task_dir - - log_success(f"Task directory: {task_dir}") - - # ============================================================================= - # Step 2: Prepare and Start Plan Agent - # ============================================================================= - log_info("Step 2: Starting Plan Agent in background...") - - log_file = task_dir_abs / ".plan-log" - log_file.touch() - - # Get proxy environment variables - https_proxy = os.environ.get("https_proxy", "") - http_proxy = os.environ.get("http_proxy", "") - all_proxy = os.environ.get("all_proxy", "") - - # Start agent in background (cross-platform, no shell script needed) - env = os.environ.copy() - env["PLAN_TASK_NAME"] = task_name - env["PLAN_DEV_TYPE"] = dev_type - env["PLAN_TASK_DIR"] = task_dir - env["PLAN_REQUIREMENT"] = requirement - env["https_proxy"] = https_proxy - env["http_proxy"] = http_proxy - env["all_proxy"] = all_proxy - - # Clear nested-session detection so the new CLI process can start - env.pop("CLAUDECODE", None) - - # Set non-interactive env var based on platform - env.update(adapter.get_non_interactive_env()) - - # Build CLI command using adapter - cli_cmd = adapter.build_run_command( - agent="plan", # Will be mapped to "trellis-plan" for OpenCode - prompt=f"Start planning for task: {task_name}", - skip_permissions=True, - verbose=True, - json_output=True, - ) - - with log_file.open("w") as log_f: - # Use shell=False for cross-platform compatibility - # creationflags for Windows, start_new_session for Unix - popen_kwargs = { - "stdout": log_f, - "stderr": subprocess.STDOUT, - "cwd": str(project_root), - "env": env, - } - if sys.platform == "win32": - popen_kwargs["creationflags"] = subprocess.CREATE_NEW_PROCESS_GROUP - else: - popen_kwargs["start_new_session"] = True - - process = subprocess.Popen(cli_cmd, **popen_kwargs) - agent_pid = process.pid - - log_success(f"Plan Agent started (PID: {agent_pid})") - - # ============================================================================= - # Summary - # ============================================================================= - print() - print(f"{Colors.GREEN}=== Plan Agent Running ==={Colors.NC}") - print() - print(f" Task: {task_name}") - print(f" Type: {dev_type}") - print(f" Dir: {task_dir}") - print(f" Log: {log_file}") - print(f" PID: {agent_pid}") - print() - print(f"{Colors.YELLOW}To monitor:{Colors.NC}") - print(f" tail -f {log_file}") - print() - print(f"{Colors.YELLOW}To check status:{Colors.NC}") - print(f" ps -p {agent_pid}") - print(f" ls -la {task_dir}") - print() - print(f"{Colors.YELLOW}After completion, run:{Colors.NC}") - print(f" python3 ./.trellis/scripts/multi_agent/start.py {task_dir}") - - return 0 - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/.trellis/scripts/multi_agent/start.py b/.trellis/scripts/multi_agent/start.py deleted file mode 100755 index 83985cc2..00000000 --- a/.trellis/scripts/multi_agent/start.py +++ /dev/null @@ -1,539 +0,0 @@ -#!/usr/bin/env python3 -""" -Multi-Agent Pipeline: Start Worktree Agent. - -Usage: python3 start.py <task-dir> -Example: python3 start.py .trellis/tasks/01-21-my-task - -This script: -1. Creates worktree (if not exists) with dependency install -2. Copies environment files (from worktree.yaml config) -3. Sets .current-task in worktree -4. Starts claude agent in background -5. Registers agent to registry.json - -Prerequisites: - - task.json must exist with 'branch' field - - agents/dispatch.md must exist (in .claude/, .cursor/, .iflow/, or .opencode/) - -Configuration: .trellis/worktree.yaml -""" - -from __future__ import annotations - -import os -import shutil -import subprocess -import sys -import uuid -from pathlib import Path - -import _bootstrap # noqa: F401 — adds parent scripts/ dir to sys.path - -from common.cli_adapter import get_cli_adapter -from common.git import run_git -from common.io import read_json, write_json -from common.log import Colors, log_info, log_success, log_warn, log_error -from common.paths import ( - DIR_WORKFLOW, - FILE_CURRENT_TASK, - FILE_TASK_JSON, - get_repo_root, -) -from common.registry import ( - registry_add_agent, - registry_get_file, -) -from common.config import ( - get_default_package, - get_packages, - get_submodule_packages, - validate_package, -) -from common.worktree import ( - get_worktree_base_dir, - get_worktree_config, - get_worktree_copy_files, - get_worktree_post_create_hooks, -) - -# Colors, log_info, log_success, log_warn, log_error, read_json, write_json -# are now imported from common.log and common.io above. - - -# ============================================================================= -# Constants -# ============================================================================= - -DEFAULT_PLATFORM = "claude" - - -# ============================================================================= -# Submodule Init -# ============================================================================= - - -def _init_submodules_for_task( - task_data: dict, worktree_path: str, project_root: Path -) -> None: - """Initialize submodules in worktree based on task's target package. - - Resolves the target package from task_data.package -> default_package -> None. - Only initializes submodule-type packages. Idempotent: skips already-initialized - submodules to avoid detaching HEAD on in-progress work. - """ - # Skip if not a monorepo (no packages configured) - if get_packages(project_root) is None: - return - - # Resolve package: task.package -> default_package -> None - task_package = task_data.get("package") - package = None - - if task_package and isinstance(task_package, str): - if validate_package(task_package, project_root): - package = task_package - else: - log_warn( - f"package '{task_package}' not found in config.yaml, " - "skipping submodule init" - ) - return - else: - # Fallback to default_package - default_pkg = get_default_package(project_root) - if default_pkg: - if validate_package(default_pkg, project_root): - package = default_pkg - else: - log_warn( - f"package '{default_pkg}' not found in config.yaml, " - "skipping submodule init" - ) - return - - if not package: - log_warn("no package specified, skipping submodule init") - return - - # Check if this package is a submodule - submodule_packages = get_submodule_packages(project_root) - if package not in submodule_packages: - log_info(f"Package '{package}' is not a submodule, skipping submodule init") - return - - submodule_path = submodule_packages[package] - log_info(f"Checking submodule status for '{package}' ({submodule_path})...") - - # Run git submodule status in worktree directory - ret, status_out, status_err = run_git( - ["submodule", "status", submodule_path], cwd=Path(worktree_path) - ) - - if ret != 0: - log_warn( - f"git submodule status failed for '{submodule_path}': {status_err.strip()}, " - "skipping submodule init" - ) - return - - # Parse the prefix character from submodule status output - # Format: "<prefix><sha1> <path> (<describe>)" - # Prefix: '-' (uninitialized), ' ' (normal), '+' (commit mismatch), 'U' (conflict) - status_line = status_out.rstrip("\n\r") - if not status_line: - log_warn(f"Empty submodule status for '{submodule_path}', skipping") - return - - prefix = status_line[0] - - if prefix == "-": - # Uninitialized: run git submodule update --init - log_info(f"Initializing submodule '{submodule_path}'...") - ret, _, err = run_git( - ["submodule", "update", "--init", submodule_path], - cwd=Path(worktree_path), - ) - if ret != 0: - log_warn(f"Failed to initialize submodule '{submodule_path}': {err.strip()}") - else: - log_success(f"Submodule '{submodule_path}' initialized") - elif prefix == " ": - log_info(f"Submodule '{submodule_path}' already initialized, skipping") - elif prefix == "+": - log_warn( - f"submodule {submodule_path} has local changes, skipping update" - ) - elif prefix == "U": - log_warn( - f"submodule {submodule_path} has conflicts, skipping" - ) - else: - log_warn( - f"Unknown submodule status prefix '{prefix}' for '{submodule_path}', skipping" - ) - - -# ============================================================================= -# Main -# ============================================================================= - - -def main() -> int: - """Main entry point.""" - import argparse - - parser = argparse.ArgumentParser(description="Multi-Agent Pipeline: Start Worktree Agent") - parser.add_argument("task_dir", help="Task directory path") - parser.add_argument( - "--platform", "-p", - choices=["claude", "cursor", "iflow", "opencode", "codex", "qoder"], - default=DEFAULT_PLATFORM, - help="Platform to use (default: claude)" - ) - - args = parser.parse_args() - task_dir_arg = args.task_dir - platform = args.platform - - # Initialize CLI adapter - adapter = get_cli_adapter(platform) - - project_root = get_repo_root() - - # Normalize paths - task_dir_path = Path(task_dir_arg) - if task_dir_path.is_absolute(): - task_dir_abs = task_dir_path - else: - task_dir_abs = project_root / task_dir_path - - try: - task_dir_relative = task_dir_abs.relative_to(project_root).as_posix() - except ValueError: - task_dir_relative = str(task_dir_abs) - - task_json_path = task_dir_abs / FILE_TASK_JSON - - # ============================================================================= - # Validation - # ============================================================================= - if not task_json_path.is_file(): - log_error(f"task.json not found at {task_json_path}") - return 1 - - if adapter.requires_agent_definition_file: - dispatch_md = adapter.get_agent_path("dispatch", project_root) - if not dispatch_md.is_file(): - log_error(f"Agent definition not found at {dispatch_md}") - log_info(f"Platform: {platform}") - return 1 - - config_file = get_worktree_config(project_root) - if not config_file.is_file(): - log_error(f"worktree.yaml not found at {config_file}") - return 1 - - # ============================================================================= - # Read Task Config - # ============================================================================= - print() - print(f"{Colors.BLUE}=== Multi-Agent Pipeline: Start ==={Colors.NC}") - log_info(f"Task: {task_dir_abs}") - - task_data = read_json(task_json_path) - if not task_data: - log_error("Failed to read task.json") - return 1 - - branch = task_data.get("branch") - task_name = task_data.get("name") - task_status = task_data.get("status") - worktree_path = task_data.get("worktree_path") - - # Check if task was rejected - if task_status == "rejected": - log_error("Task was rejected by Plan Agent") - rejected_file = task_dir_abs / "REJECTED.md" - if rejected_file.is_file(): - print() - print(f"{Colors.YELLOW}Rejection reason:{Colors.NC}") - print(rejected_file.read_text(encoding="utf-8")) - print() - log_info( - "To retry, delete this directory and run plan.py again with revised requirements" - ) - return 1 - - # Check if prd.md exists (plan completed successfully) - prd_file = task_dir_abs / "prd.md" - if not prd_file.is_file(): - log_error("prd.md not found - Plan Agent may not have completed") - log_info(f"Check plan log: {task_dir_abs}/.plan-log") - return 1 - - if not branch: - log_error("branch field not set in task.json") - log_info("Please set branch field first, e.g.:") - log_info( - " jq '.branch = \"task/my-task\"' task.json > tmp && mv tmp task.json" - ) - return 1 - - log_info(f"Branch: {branch}") - log_info(f"Name: {task_name}") - - # ============================================================================= - # Step 1: Create Worktree (if not exists) - # ============================================================================= - if not worktree_path or not Path(worktree_path).is_dir(): - log_info("Step 1: Creating worktree...") - - # Record current branch as base_branch (PR target) - _, base_branch_out, _ = run_git( - ["branch", "--show-current"], cwd=project_root - ) - base_branch = base_branch_out.strip() - log_info(f"Base branch (PR target): {base_branch}") - - # Calculate worktree path - worktree_base = get_worktree_base_dir(project_root) - worktree_base.mkdir(parents=True, exist_ok=True) - worktree_base = worktree_base.resolve() - worktree_path_obj = worktree_base / branch - worktree_path = str(worktree_path_obj) - - # Create parent directory - worktree_path_obj.parent.mkdir(parents=True, exist_ok=True) - - # Create branch if not exists - ret, _, _ = run_git( - ["show-ref", "--verify", "--quiet", f"refs/heads/{branch}"], - cwd=project_root, - ) - if ret == 0: - log_info("Branch exists, checking out...") - ret, _, err = run_git( - ["worktree", "add", worktree_path, branch], cwd=project_root - ) - else: - log_info(f"Creating new branch: {branch}") - ret, _, err = run_git( - ["worktree", "add", "-b", branch, worktree_path], cwd=project_root - ) - - if ret != 0: - log_error(f"Failed to create worktree: {err}") - return 1 - - log_success(f"Worktree created: {worktree_path}") - - # Update task.json with worktree_path and base_branch - task_data["worktree_path"] = worktree_path - task_data["base_branch"] = base_branch - write_json(task_json_path, task_data) - - # ----- Copy environment files ----- - log_info("Copying environment files...") - copy_list = get_worktree_copy_files(project_root) - copy_count = 0 - - for item in copy_list: - if not item: - continue - - source = project_root / item - target = Path(worktree_path) / item - - if source.is_file(): - target.parent.mkdir(parents=True, exist_ok=True) - shutil.copy2(str(source), str(target)) - copy_count += 1 - - if copy_count > 0: - log_success(f"Copied {copy_count} file(s)") - - # ----- Copy task directory (may not be committed yet) ----- - log_info("Copying task directory...") - task_target_dir = Path(worktree_path) / task_dir_relative - task_target_dir.parent.mkdir(parents=True, exist_ok=True) - if task_target_dir.exists(): - shutil.rmtree(str(task_target_dir)) - shutil.copytree(str(task_dir_abs), str(task_target_dir)) - log_success("Task directory copied to worktree") - - # ----- Initialize submodules (before hooks, so hooks can use submodule content) ----- - _init_submodules_for_task(task_data, worktree_path, project_root) - - # ----- Run post_create hooks ----- - log_info("Running post_create hooks...") - post_create = get_worktree_post_create_hooks(project_root) - hook_count = 0 - - for cmd in post_create: - if not cmd: - continue - - log_info(f" Running: {cmd}") - ret = subprocess.run(cmd, shell=True, cwd=worktree_path) - if ret.returncode != 0: - log_error(f"Hook failed: {cmd}") - return 1 - hook_count += 1 - - if hook_count > 0: - log_success(f"Ran {hook_count} hook(s)") - else: - log_info(f"Step 1: Using existing worktree: {worktree_path}") - - # ----- Initialize submodules (idempotent, for reused worktrees) ----- - _init_submodules_for_task(task_data, worktree_path, project_root) - - # ============================================================================= - # Step 2: Set .current-task in Worktree - # ============================================================================= - log_info("Step 2: Setting current task in worktree...") - - worktree_workflow_dir = Path(worktree_path) / DIR_WORKFLOW - worktree_workflow_dir.mkdir(parents=True, exist_ok=True) - - current_task_file = worktree_workflow_dir / FILE_CURRENT_TASK - current_task_file.write_text(task_dir_relative, encoding="utf-8") - log_success(f"Current task set: {task_dir_relative}") - - # ============================================================================= - # Step 3: Prepare and Start Claude Agent - # ============================================================================= - log_info(f"Step 3: Starting {adapter.cli_name} agent...") - - # Update task status - task_data["status"] = "in_progress" - write_json(task_json_path, task_data) - - log_file = Path(worktree_path) / ".agent-log" - session_id_file = Path(worktree_path) / ".session-id" - - log_file.touch() - - # Generate session ID for resume support (Claude Code only) - # OpenCode generates its own session ID, we'll extract it from logs later - if adapter.supports_session_id_on_create: - session_id = str(uuid.uuid4()).lower() - session_id_file.write_text(session_id, encoding="utf-8") - log_info(f"Session ID: {session_id}") - else: - session_id = None # Will be extracted from logs after startup - log_info("Session ID will be extracted from logs after startup") - - # Get proxy environment variables - https_proxy = os.environ.get("https_proxy", "") - http_proxy = os.environ.get("http_proxy", "") - all_proxy = os.environ.get("all_proxy", "") - - # Start agent in background (cross-platform, no shell script needed) - env = os.environ.copy() - env["https_proxy"] = https_proxy - env["http_proxy"] = http_proxy - env["all_proxy"] = all_proxy - - # Clear nested-session detection so the new CLI process can start - # (when this script runs inside a Claude Code session, CLAUDECODE=1 is inherited) - env.pop("CLAUDECODE", None) - - # Set non-interactive env var based on platform - env.update(adapter.get_non_interactive_env()) - - # Build CLI command using adapter - # Note: Use explicit prompt to avoid confusion with CI/CD pipelines - # Also remind the model to follow its agent definition for better cross-model compatibility - cli_cmd = adapter.build_run_command( - agent="dispatch", - prompt="Follow your agent instructions to execute the task workflow. Start by reading .trellis/.current-task to get the task directory, then execute each action in task.json next_action array in order.", - session_id=session_id if adapter.supports_session_id_on_create else None, - skip_permissions=True, - verbose=True, - json_output=True, - ) - - with log_file.open("w") as log_f: - # Use shell=False for cross-platform compatibility - # creationflags for Windows, start_new_session for Unix - popen_kwargs = { - "stdout": log_f, - "stderr": subprocess.STDOUT, - "cwd": worktree_path, - "env": env, - } - if sys.platform == "win32": - popen_kwargs["creationflags"] = subprocess.CREATE_NEW_PROCESS_GROUP - else: - popen_kwargs["start_new_session"] = True - - process = subprocess.Popen(cli_cmd, **popen_kwargs) - agent_pid = process.pid - - log_success(f"Agent started with PID: {agent_pid}") - - # For OpenCode: extract session ID from logs after startup - if not adapter.supports_session_id_on_create: - import time - log_info("Waiting for session ID from logs...") - # Wait a bit for the log to have session ID - for _ in range(10): # Try for up to 5 seconds - time.sleep(0.5) - try: - log_content = log_file.read_text(encoding="utf-8", errors="replace") - session_id = adapter.extract_session_id_from_log(log_content) - if session_id: - session_id_file.write_text(session_id, encoding="utf-8") - log_success(f"Session ID extracted: {session_id}") - break - except Exception: - pass - else: - log_warn("Could not extract session ID from logs") - session_id = "unknown" - - # ============================================================================= - # Step 4: Register to Registry (in main repo, not worktree) - # ============================================================================= - log_info("Step 4: Registering agent to registry...") - - # Generate agent ID - task_id = task_data.get("id") - if not task_id: - task_id = branch.replace("/", "-") - - registry_add_agent( - task_id, worktree_path, agent_pid, task_dir_relative, project_root, platform - ) - - log_success(f"Agent registered: {task_id}") - - # ============================================================================= - # Summary - # ============================================================================= - print() - print(f"{Colors.GREEN}=== Agent Started ==={Colors.NC}") - print() - print(f" ID: {task_id}") - print(f" PID: {agent_pid}") - print(f" Session: {session_id}") - print(f" Worktree: {worktree_path}") - print(f" Task: {task_dir_relative}") - print(f" Log: {log_file}") - print(f" Registry: {registry_get_file(project_root)}") - print() - print(f"{Colors.YELLOW}To monitor:{Colors.NC} tail -f {log_file}") - print(f"{Colors.YELLOW}To stop:{Colors.NC} kill {agent_pid}") - if session_id and session_id != "unknown": - resume_cmd = adapter.get_resume_command_str(session_id, cwd=worktree_path) - print(f"{Colors.YELLOW}To resume:{Colors.NC} {resume_cmd}") - else: - print(f"{Colors.YELLOW}To resume:{Colors.NC} (session ID not available)") - - return 0 - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/.trellis/scripts/multi_agent/status.py b/.trellis/scripts/multi_agent/status.py deleted file mode 100755 index cba7890e..00000000 --- a/.trellis/scripts/multi_agent/status.py +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env python3 -""" -Multi-Agent Pipeline: Status Monitor. - -Usage: - python3 status.py Show summary of all tasks (default) - python3 status.py -a <assignee> Filter tasks by assignee - python3 status.py --list List all worktrees and agents - python3 status.py --detail <task> Detailed task status - python3 status.py --watch <task> Watch agent log in real-time - python3 status.py --log <task> Show recent log entries - python3 status.py --registry Show agent registry - -Entry shim — delegates to status_display and status_monitor. -""" - -from __future__ import annotations - -import argparse -import sys - -import _bootstrap # noqa: F401 — adds parent scripts/ dir to sys.path - -from common.paths import get_repo_root - -from .status_display import ( - cmd_detail, - cmd_help, - cmd_list, - cmd_registry, - cmd_summary, -) -from .status_monitor import cmd_log, cmd_watch - - -# ============================================================================= -# Main -# ============================================================================= - -def main() -> int: - """Main entry point.""" - parser = argparse.ArgumentParser(description="Multi-Agent Pipeline: Status Monitor") - parser.add_argument("-a", "--assignee", help="Filter by assignee") - parser.add_argument( - "--list", action="store_true", help="List all worktrees and agents" - ) - parser.add_argument("--detail", metavar="TASK", help="Detailed task status") - parser.add_argument("--progress", metavar="TASK", help="Quick progress view") - parser.add_argument("--watch", metavar="TASK", help="Watch agent log") - parser.add_argument("--log", metavar="TASK", help="Show recent log entries") - parser.add_argument("--registry", action="store_true", help="Show agent registry") - parser.add_argument("target", nargs="?", help="Target task") - - args = parser.parse_args() - repo_root = get_repo_root() - - if args.list: - return cmd_list(repo_root) - elif args.detail: - return cmd_detail(args.detail, repo_root) - elif args.progress: - return cmd_detail(args.progress, repo_root) # Similar to detail - elif args.watch: - return cmd_watch(args.watch, repo_root) - elif args.log: - return cmd_log(args.log, repo_root) - elif args.registry: - return cmd_registry(repo_root) - elif args.target: - return cmd_detail(args.target, repo_root) - else: - return cmd_summary(repo_root, args.assignee) - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/.trellis/scripts/multi_agent/status_display.py b/.trellis/scripts/multi_agent/status_display.py deleted file mode 100755 index 6b15d861..00000000 --- a/.trellis/scripts/multi_agent/status_display.py +++ /dev/null @@ -1,542 +0,0 @@ -#!/usr/bin/env python3 -""" -Multi-Agent Pipeline: Status display and formatting. - -Provides: - cmd_help - Show help text - cmd_list - List worktrees and agents - cmd_summary - Summary of all tasks with agent status - cmd_detail - Detailed single-agent status - cmd_registry - Dump agent registry - -Also exports shared utilities used by status_monitor: - is_running, find_agent, get_registry_file, calc_elapsed, count_modified_files -""" - -from __future__ import annotations - -import json -import os -import subprocess -from datetime import datetime -from pathlib import Path - -from common.cli_adapter import get_cli_adapter -from common.io import read_json -from common.log import Colors -from common.developer import ensure_developer -from common.paths import ( - get_repo_root, - get_tasks_dir, -) -from common.phase import get_phase_info -from common.task_queue import format_task_stats, get_task_stats -from common.tasks import iter_active_tasks -from common.worktree import get_agents_dir - - -# ============================================================================= -# Shared Utilities -# ============================================================================= - -def is_running(pid: int | str | None) -> bool: - """Check if PID is running.""" - if not pid: - return False - try: - pid_int = int(pid) - os.kill(pid_int, 0) - return True - except (ProcessLookupError, ValueError, PermissionError, TypeError): - return False - - -def status_color(status: str) -> str: - """Get status color.""" - colors = { - "completed": Colors.GREEN, - "in_progress": Colors.BLUE, - "planning": Colors.YELLOW, - } - return colors.get(status, Colors.DIM) - - -def get_registry_file(repo_root: Path) -> Path | None: - """Get registry file path.""" - agents_dir = get_agents_dir(repo_root) - if agents_dir: - return agents_dir / "registry.json" - return None - - -def find_agent(search: str, repo_root: Path) -> dict | None: - """Find agent by task name or ID.""" - registry_file = get_registry_file(repo_root) - if not registry_file or not registry_file.is_file(): - return None - - data = read_json(registry_file) - if not data: - return None - - for agent in data.get("agents", []): - # Exact ID match - if agent.get("id") == search: - return agent - # Partial match on task_dir - task_dir = agent.get("task_dir", "") - if search in task_dir: - return agent - - return None - - -def calc_elapsed(started: str | None) -> str: - """Calculate elapsed time from ISO timestamp.""" - if not started: - return "N/A" - - try: - # Parse ISO format - if "+" in started: - started = started.split("+")[0] - if "T" in started: - start_dt = datetime.fromisoformat(started) - else: - return "N/A" - - now = datetime.now() - elapsed = (now - start_dt).total_seconds() - - if elapsed < 60: - return f"{int(elapsed)}s" - elif elapsed < 3600: - mins = int(elapsed // 60) - secs = int(elapsed % 60) - return f"{mins}m {secs}s" - else: - hours = int(elapsed // 3600) - mins = int((elapsed % 3600) // 60) - return f"{hours}h {mins}m" - except (ValueError, TypeError): - return "N/A" - - -def count_modified_files(worktree: str) -> int: - """Count modified files in worktree.""" - if not Path(worktree).is_dir(): - return 0 - - try: - result = subprocess.run( - ["git", "status", "--short"], - cwd=worktree, - capture_output=True, - text=True, - encoding="utf-8", - errors="replace", - ) - return len([line for line in result.stdout.splitlines() if line.strip()]) - except Exception: - return 0 - - -# ============================================================================= -# Commands -# ============================================================================= - -def cmd_help() -> int: - """Show help.""" - print("""Multi-Agent Pipeline: Status Monitor - -Usage: - python3 status.py Show summary of all tasks - python3 status.py -a <assignee> Filter tasks by assignee - python3 status.py --list List all worktrees and agents - python3 status.py --detail <task> Detailed task status - python3 status.py --progress <task> Quick progress view with recent activity - python3 status.py --watch <task> Watch agent log in real-time - python3 status.py --log <task> Show recent log entries - python3 status.py --registry Show agent registry - -Examples: - python3 status.py -a taosu - python3 status.py --detail my-task - python3 status.py --progress my-task - python3 status.py --watch 01-16-worktree-support - python3 status.py --log worktree-support -""") - return 0 - - -def cmd_list(repo_root: Path) -> int: - """List worktrees and agents.""" - print(f"{Colors.BLUE}=== Git Worktrees ==={Colors.NC}") - print() - - subprocess.run(["git", "worktree", "list"], cwd=repo_root) - print() - - print(f"{Colors.BLUE}=== Registered Agents ==={Colors.NC}") - print() - - registry_file = get_registry_file(repo_root) - if not registry_file or not registry_file.is_file(): - print(" (no registry found)") - return 0 - - data = read_json(registry_file) - if not data or not data.get("agents"): - print(" (no agents registered)") - return 0 - - for agent in data["agents"]: - agent_id = agent.get("id", "?") - pid = agent.get("pid") - wt = agent.get("worktree_path", "?") - started = agent.get("started_at", "?") - - if is_running(pid): - status_icon = f"{Colors.GREEN}●{Colors.NC}" - else: - status_icon = f"{Colors.RED}○{Colors.NC}" - - print(f" {status_icon} {agent_id} (PID: {pid})") - print(f" {Colors.DIM}Worktree: {wt}{Colors.NC}") - print(f" {Colors.DIM}Started: {started}{Colors.NC}") - print() - - return 0 - - -def cmd_summary(repo_root: Path, filter_assignee: str | None = None) -> int: - """Show summary of all tasks.""" - # Import lazily to avoid circular import at module level - from .status_monitor import get_last_tool, get_last_message - - ensure_developer(repo_root) - - tasks_dir = get_tasks_dir(repo_root) - if not tasks_dir.is_dir(): - print("No tasks directory found") - return 0 - - registry_file = get_registry_file(repo_root) - - # Count running agents - running_count = 0 - total_agents = 0 - - if registry_file and registry_file.is_file(): - data = read_json(registry_file) - if data: - agents = data.get("agents", []) - total_agents = len(agents) - for agent in agents: - if is_running(agent.get("pid")): - running_count += 1 - - # Task queue stats - task_stats = get_task_stats(repo_root) - - print(f"{Colors.BLUE}=== Multi-Agent Status ==={Colors.NC}") - print( - f" Agents: {Colors.GREEN}{running_count}{Colors.NC} running / {total_agents} registered" - ) - print(f" Tasks: {format_task_stats(task_stats)}") - print() - - # Process tasks - running_tasks = [] - stopped_tasks = [] - regular_tasks = [] - - registry_data = ( - read_json(registry_file) - if registry_file and registry_file.is_file() - else None - ) - - for t in iter_active_tasks(tasks_dir): - name = t.dir_name - status = t.status - assignee = t.assignee or "unassigned" - priority = t.priority - - # Filter by assignee - if filter_assignee and assignee != filter_assignee: - continue - - # Check agent status - agent_info = None - if registry_data: - for agent in registry_data.get("agents", []): - if name in agent.get("task_dir", ""): - agent_info = agent - break - - if agent_info: - pid = agent_info.get("pid") - worktree = agent_info.get("worktree_path", "") - started = agent_info.get("started_at") - agent_platform = agent_info.get("platform", "claude") - - if is_running(pid): - # Running agent - task_dir_rel = agent_info.get("task_dir", "") - worktree_task_json = Path(worktree) / task_dir_rel / "task.json" - phase_source = t.directory / "task.json" - if worktree_task_json.is_file(): - phase_source = worktree_task_json - - phase_info_str = get_phase_info(phase_source) - elapsed = calc_elapsed(started) - modified = count_modified_files(worktree) - - worktree_data = read_json(phase_source) - branch = worktree_data.get("branch", "N/A") if worktree_data else "N/A" - - log_file = Path(worktree) / ".agent-log" - last_tool = get_last_tool(log_file, platform=agent_platform) - - running_tasks.append( - { - "name": name, - "priority": priority, - "assignee": assignee, - "phase_info": phase_info_str, - "elapsed": elapsed, - "branch": branch, - "modified": modified, - "last_tool": last_tool, - "pid": pid, - } - ) - else: - # Stopped agent - task_dir_rel = agent_info.get("task_dir", "") - worktree_task_json = Path(worktree) / task_dir_rel / "task.json" - worktree_status = "unknown" - - if worktree_task_json.is_file(): - wt_data = read_json(worktree_task_json) - if wt_data: - worktree_status = wt_data.get("status", "unknown") - - session_id_file = Path(worktree) / ".session-id" - log_file = Path(worktree) / ".agent-log" - - stopped_tasks.append( - { - "name": name, - "worktree": worktree, - "status": worktree_status, - "session_id_file": session_id_file, - "log_file": log_file, - "platform": agent_info.get("platform", "claude"), - } - ) - else: - # Regular task - regular_tasks.append( - { - "name": name, - "status": status, - "priority": priority, - "assignee": assignee, - } - ) - - # Output running agents - if running_tasks: - print(f"{Colors.CYAN}Running Agents:{Colors.NC}") - for t in running_tasks: - priority_color = ( - Colors.RED - if t["priority"] == "P0" - else (Colors.YELLOW if t["priority"] == "P1" else Colors.BLUE) - ) - print( - f"{Colors.GREEN}▶{Colors.NC} {Colors.CYAN}{t['name']}{Colors.NC} {Colors.GREEN}[running]{Colors.NC} {priority_color}[{t['priority']}]{Colors.NC} @{t['assignee']}" - ) - print(f" Phase: {t['phase_info']}") - print(f" Elapsed: {t['elapsed']}") - print(f" Branch: {Colors.DIM}{t['branch']}{Colors.NC}") - print(f" Modified: {t['modified']} file(s)") - if t["last_tool"]: - print(f" Activity: {Colors.YELLOW}{t['last_tool']}{Colors.NC}") - print(f" PID: {Colors.DIM}{t['pid']}{Colors.NC}") - print() - - # Output stopped agents - if stopped_tasks: - print(f"{Colors.RED}Stopped Agents:{Colors.NC}") - for t in stopped_tasks: - if t["status"] == "completed": - print( - f"{Colors.GREEN}✓{Colors.NC} {t['name']} {Colors.GREEN}[completed]{Colors.NC}" - ) - else: - if t["session_id_file"].is_file(): - session_id = ( - t["session_id_file"].read_text(encoding="utf-8").strip() - ) - last_msg = get_last_message(t["log_file"], 150, platform=t.get("platform", "claude")) - print( - f"{Colors.RED}○{Colors.NC} {t['name']} {Colors.RED}[stopped]{Colors.NC}" - ) - if last_msg: - print(f'{Colors.DIM}"{last_msg}"{Colors.NC}') - # Use CLI adapter for platform-specific resume command - adapter = get_cli_adapter(t.get("platform", "claude")) - resume_cmd = adapter.get_resume_command_str(session_id, cwd=t["worktree"]) - print(f"{Colors.YELLOW}{resume_cmd}{Colors.NC}") - else: - print( - f"{Colors.RED}○{Colors.NC} {t['name']} {Colors.RED}[stopped]{Colors.NC} {Colors.DIM}(no session-id){Colors.NC}" - ) - print() - - # Separator - if (running_tasks or stopped_tasks) and regular_tasks: - print(f"{Colors.DIM}───────────────────────────────────────{Colors.NC}") - print() - - # Output regular tasks grouped by assignee - if regular_tasks: - # Sort by assignee, priority, status - regular_tasks.sort( - key=lambda x: ( - x["assignee"], - {"P0": 0, "P1": 1, "P2": 2, "P3": 3}.get(x["priority"], 2), - {"in_progress": 0, "planning": 1, "completed": 2}.get(x["status"], 1), - ) - ) - - current_assignee = None - for t in regular_tasks: - if t["assignee"] != current_assignee: - if current_assignee is not None: - print() - print(f"{Colors.CYAN}@{t['assignee']}:{Colors.NC}") - current_assignee = t["assignee"] - - color = status_color(t["status"]) - priority_color = ( - Colors.RED - if t["priority"] == "P0" - else (Colors.YELLOW if t["priority"] == "P1" else Colors.BLUE) - ) - print( - f" {color}●{Colors.NC} {t['name']} ({t['status']}) {priority_color}[{t['priority']}]{Colors.NC}" - ) - - if running_tasks: - print() - print(f"{Colors.DIM}─────────────────────────────────────{Colors.NC}") - print(f"{Colors.DIM}Use --progress <name> for quick activity view{Colors.NC}") - print(f"{Colors.DIM}Use --detail <name> for more info{Colors.NC}") - - print() - return 0 - - -def cmd_detail(target: str, repo_root: Path) -> int: - """Show detailed task status.""" - agent = find_agent(target, repo_root) - if not agent: - print(f"Agent not found: {target}") - return 1 - - agent_id = agent.get("id", "?") - pid = agent.get("pid") - worktree = agent.get("worktree_path", "?") - task_dir = agent.get("task_dir", "?") - started = agent.get("started_at", "?") - platform = agent.get("platform", "claude") - - # Check for session-id - session_id = "" - session_id_file = Path(worktree) / ".session-id" - if session_id_file.is_file(): - session_id = session_id_file.read_text(encoding="utf-8").strip() - - print(f"{Colors.BLUE}=== Agent Detail: {agent_id} ==={Colors.NC}") - print() - print(f" ID: {agent_id}") - print(f" PID: {pid}") - print(f" Session: {session_id or 'N/A'}") - print(f" Worktree: {worktree}") - print(f" Task Dir: {task_dir}") - print(f" Started: {started}") - print() - - # Status - if is_running(pid): - print(f" Status: {Colors.GREEN}Running{Colors.NC}") - else: - print(f" Status: {Colors.RED}Stopped{Colors.NC}") - if session_id: - print() - # Use CLI adapter for platform-specific resume command - adapter = get_cli_adapter(platform) - resume_cmd = adapter.get_resume_command_str(session_id, cwd=worktree) - print(f" {Colors.YELLOW}Resume:{Colors.NC} {resume_cmd}") - - # Task info - task_json = repo_root / task_dir / "task.json" - if task_json.is_file(): - print() - print(f"{Colors.BLUE}=== Task Info ==={Colors.NC}") - print() - data = read_json(task_json) - if data: - print(f" Status: {data.get('status', 'unknown')}") - print(f" Branch: {data.get('branch', 'N/A')}") - print(f" Base Branch: {data.get('base_branch', 'N/A')}") - - # Git changes - if Path(worktree).is_dir(): - print() - print(f"{Colors.BLUE}=== Git Changes ==={Colors.NC}") - print() - - result = subprocess.run( - ["git", "status", "--short"], - cwd=worktree, - capture_output=True, - text=True, - encoding="utf-8", - errors="replace", - ) - changes = result.stdout.strip() - if changes: - for line in changes.splitlines()[:10]: - print(f" {line}") - total = len(changes.splitlines()) - if total > 10: - print(f" ... and {total - 10} more") - else: - print(" (no changes)") - - print() - return 0 - - -def cmd_registry(repo_root: Path) -> int: - """Show agent registry.""" - registry_file = get_registry_file(repo_root) - - print(f"{Colors.BLUE}=== Agent Registry ==={Colors.NC}") - print() - print(f"File: {registry_file}") - print() - - if registry_file and registry_file.is_file(): - data = read_json(registry_file) - if data: - print(json.dumps(data, indent=2)) - else: - print("(registry not found)") - - return 0 diff --git a/.trellis/scripts/multi_agent/status_monitor.py b/.trellis/scripts/multi_agent/status_monitor.py deleted file mode 100755 index d92087f4..00000000 --- a/.trellis/scripts/multi_agent/status_monitor.py +++ /dev/null @@ -1,225 +0,0 @@ -#!/usr/bin/env python3 -""" -Multi-Agent Pipeline: Process monitoring and log parsing. - -Provides: - tail_follow - Follow a file like 'tail -f' - get_last_tool - Get last tool call from agent log - get_last_message - Get last assistant text from agent log - cmd_watch - Watch agent log in real-time - cmd_log - Show recent log entries -""" - -from __future__ import annotations - -import json -import time -from pathlib import Path - -from common.log import Colors - -from .status_display import find_agent - - -# ============================================================================= -# Log Parsing -# ============================================================================= - -def tail_follow(file_path: Path) -> None: - """Follow a file like 'tail -f', cross-platform compatible.""" - with open(file_path, "r", encoding="utf-8", errors="replace") as f: - # Seek to end of file - f.seek(0, 2) - - while True: - line = f.readline() - if line: - print(line, end="", flush=True) - else: - time.sleep(0.1) - - -def get_last_tool(log_file: Path, platform: str = "claude") -> str | None: - """Get the last tool call from agent log. - - Supports both Claude Code and OpenCode log formats. - - Claude Code format: - {"type": "assistant", "message": {"content": [{"type": "tool_use", "name": "Read"}]}} - - OpenCode format: - {"type": "tool_use", "tool": "bash", "state": {"status": "completed"}} - """ - if not log_file.is_file(): - return None - - try: - lines = log_file.read_text(encoding="utf-8").splitlines() - for line in reversed(lines[-100:]): - try: - data = json.loads(line) - - if platform == "opencode": - # OpenCode format: {"type": "tool_use", "tool": "bash", ...} - if data.get("type") == "tool_use": - return data.get("tool") - else: - # Claude Code format: {"type": "assistant", "message": {"content": [...]}} - if data.get("type") == "assistant": - content = data.get("message", {}).get("content", []) - for item in content: - if item.get("type") == "tool_use": - return item.get("name") - except json.JSONDecodeError: - continue - except Exception: - pass - return None - - -def get_last_message(log_file: Path, max_len: int = 100, platform: str = "claude") -> str | None: - """Get the last assistant text from agent log. - - Supports both Claude Code and OpenCode log formats. - - Claude Code format: - {"type": "assistant", "message": {"content": [{"type": "text", "text": "..."}]}} - - OpenCode format: - {"type": "text", "text": "..."} - """ - if not log_file.is_file(): - return None - - try: - lines = log_file.read_text(encoding="utf-8").splitlines() - for line in reversed(lines[-100:]): - try: - data = json.loads(line) - - if platform == "opencode": - # OpenCode format: {"type": "text", "text": "..."} - if data.get("type") == "text": - text = data.get("text", "") - if text: - return text[:max_len] - else: - # Claude Code format: {"type": "assistant", "message": {"content": [...]}} - if data.get("type") == "assistant": - content = data.get("message", {}).get("content", []) - for item in content: - if item.get("type") == "text": - text = item.get("text", "") - if text: - return text[:max_len] - except json.JSONDecodeError: - continue - except Exception: - pass - return None - - -# ============================================================================= -# Commands -# ============================================================================= - -def cmd_watch(target: str, repo_root: Path) -> int: - """Watch agent log in real-time.""" - agent = find_agent(target, repo_root) - if not agent: - print(f"Agent not found: {target}") - return 1 - - worktree = agent.get("worktree_path", "") - log_file = Path(worktree) / ".agent-log" - - if not log_file.is_file(): - print(f"Log file not found: {log_file}") - return 1 - - print(f"{Colors.BLUE}Watching:{Colors.NC} {log_file}") - print(f"{Colors.DIM}Press Ctrl+C to stop{Colors.NC}") - print() - - try: - tail_follow(log_file) - except KeyboardInterrupt: - print() # Clean newline after Ctrl+C - return 0 - - -def cmd_log(target: str, repo_root: Path) -> int: - """Show recent log entries.""" - agent = find_agent(target, repo_root) - if not agent: - print(f"Agent not found: {target}") - return 1 - - worktree = agent.get("worktree_path", "") - platform = agent.get("platform", "claude") - log_file = Path(worktree) / ".agent-log" - - if not log_file.is_file(): - print(f"Log file not found: {log_file}") - return 1 - - print(f"{Colors.BLUE}=== Recent Log: {target} ==={Colors.NC}") - print(f"{Colors.DIM}Platform: {platform}{Colors.NC}") - print() - - lines = log_file.read_text(encoding="utf-8").splitlines() - for line in lines[-50:]: - try: - data = json.loads(line) - msg_type = data.get("type", "") - - if platform == "opencode": - # OpenCode format - if msg_type == "text": - text = data.get("text", "") - if text: - display = text[:300] - if len(text) > 300: - display += "..." - print(f"{Colors.BLUE}[TEXT]{Colors.NC} {display}") - elif msg_type == "tool_use": - tool_name = data.get("tool", "unknown") - status = data.get("state", {}).get("status", "") - print(f"{Colors.YELLOW}[TOOL]{Colors.NC} {tool_name} ({status})") - elif msg_type == "step_start": - print(f"{Colors.CYAN}[STEP]{Colors.NC} Start") - elif msg_type == "step_finish": - reason = data.get("reason", "") - print(f"{Colors.CYAN}[STEP]{Colors.NC} Finish ({reason})") - elif msg_type == "error": - error_msg = data.get("message", "") - print(f"{Colors.RED}[ERROR]{Colors.NC} {error_msg}") - else: - # Claude Code format - if msg_type == "system": - subtype = data.get("subtype", "") - print(f"{Colors.CYAN}[SYSTEM]{Colors.NC} {subtype}") - elif msg_type == "user": - content = data.get("message", {}).get("content", "") - if content: - print(f"{Colors.GREEN}[USER]{Colors.NC} {content[:200]}") - elif msg_type == "assistant": - content = data.get("message", {}).get("content", []) - if content: - item = content[0] - text = item.get("text") - tool = item.get("name") - if text: - display = text[:300] - if len(text) > 300: - display += "..." - print(f"{Colors.BLUE}[ASSISTANT]{Colors.NC} {display}") - elif tool: - print(f"{Colors.YELLOW}[TOOL]{Colors.NC} {tool}") - elif msg_type == "result": - tool_name = data.get("tool", "unknown") - print(f"{Colors.DIM}[RESULT]{Colors.NC} {tool_name} completed") - except json.JSONDecodeError: - continue - - return 0 diff --git a/.trellis/scripts/task.py b/.trellis/scripts/task.py deleted file mode 100755 index e207b61a..00000000 --- a/.trellis/scripts/task.py +++ /dev/null @@ -1,445 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Task Management Script for Multi-Agent Pipeline. - -Usage: - python3 task.py create "<title>" [--slug <name>] [--assignee <dev>] [--priority P0|P1|P2|P3] [--parent <dir>] [--package <pkg>] - python3 task.py init-context <dir> <type> [--package <pkg>] # Initialize jsonl files - python3 task.py add-context <dir> <file> <path> [reason] # Add jsonl entry - python3 task.py validate <dir> # Validate jsonl files - python3 task.py list-context <dir> # List jsonl entries - python3 task.py start <dir> # Set as current task - python3 task.py finish # Clear current task - python3 task.py set-branch <dir> <branch> # Set git branch - python3 task.py set-base-branch <dir> <branch> # Set PR target branch - python3 task.py set-scope <dir> <scope> # Set scope for PR title - python3 task.py create-pr [dir] [--dry-run] # Create PR from task - python3 task.py archive <task-name> # Archive completed task - python3 task.py list # List active tasks - python3 task.py list-archive [month] # List archived tasks - python3 task.py add-subtask <parent-dir> <child-dir> # Link child to parent - python3 task.py remove-subtask <parent-dir> <child-dir> # Unlink child from parent -""" - -from __future__ import annotations - -import argparse -import sys -from pathlib import Path - -from common.log import Colors, colored -from common.paths import ( - DIR_WORKFLOW, - DIR_TASKS, - FILE_TASK_JSON, - get_repo_root, - get_developer, - get_tasks_dir, - get_current_task, - set_current_task, - clear_current_task, -) -from common.task_utils import resolve_task_dir, run_task_hooks -from common.tasks import iter_active_tasks, children_progress - -# Import command handlers from split modules (also re-exports for plan.py compatibility) -from common.task_store import ( - cmd_create, - cmd_archive, - cmd_set_branch, - cmd_set_base_branch, - cmd_set_scope, - cmd_add_subtask, - cmd_remove_subtask, -) -from common.task_context import ( - cmd_init_context, - cmd_add_context, - cmd_validate, - cmd_list_context, -) - - -# ============================================================================= -# Command: start / finish -# ============================================================================= - -def cmd_start(args: argparse.Namespace) -> int: - """Set current task.""" - repo_root = get_repo_root() - task_input = args.dir - - if not task_input: - print(colored("Error: task directory or name required", Colors.RED)) - return 1 - - # Resolve task directory (supports task name, relative path, or absolute path) - full_path = resolve_task_dir(task_input, repo_root) - - if not full_path.is_dir(): - print(colored(f"Error: Task not found: {task_input}", Colors.RED)) - print("Hint: Use task name (e.g., 'my-task') or full path (e.g., '.trellis/tasks/01-31-my-task')") - return 1 - - # Convert to relative path for storage - try: - task_dir = full_path.relative_to(repo_root).as_posix() - except ValueError: - task_dir = str(full_path) - - if set_current_task(task_dir, repo_root): - print(colored(f"✓ Current task set to: {task_dir}", Colors.GREEN)) - print() - print(colored("The hook will now inject context from this task's jsonl files.", Colors.BLUE)) - - task_json_path = full_path / FILE_TASK_JSON - run_task_hooks("after_start", task_json_path, repo_root) - return 0 - else: - print(colored("Error: Failed to set current task", Colors.RED)) - return 1 - - -def cmd_finish(args: argparse.Namespace) -> int: - """Clear current task.""" - repo_root = get_repo_root() - current = get_current_task(repo_root) - - if not current: - print(colored("No current task set", Colors.YELLOW)) - return 0 - - # Resolve task.json path before clearing - task_json_path = repo_root / current / FILE_TASK_JSON - - clear_current_task(repo_root) - print(colored(f"✓ Cleared current task (was: {current})", Colors.GREEN)) - - if task_json_path.is_file(): - run_task_hooks("after_finish", task_json_path, repo_root) - return 0 - - -# ============================================================================= -# Command: list -# ============================================================================= - -def cmd_list(args: argparse.Namespace) -> int: - """List active tasks.""" - repo_root = get_repo_root() - tasks_dir = get_tasks_dir(repo_root) - current_task = get_current_task(repo_root) - developer = get_developer(repo_root) - filter_mine = args.mine - filter_status = args.status - - if filter_mine: - if not developer: - print(colored("Error: No developer set. Run init_developer.py first", Colors.RED), file=sys.stderr) - return 1 - print(colored(f"My tasks (assignee: {developer}):", Colors.BLUE)) - else: - print(colored("All active tasks:", Colors.BLUE)) - print() - - # Single pass: collect all tasks via shared iterator - all_tasks = {t.dir_name: t for t in iter_active_tasks(tasks_dir)} - all_statuses = {name: t.status for name, t in all_tasks.items()} - - # Display tasks hierarchically - count = 0 - - def _print_task(dir_name: str, indent: int = 0) -> None: - nonlocal count - t = all_tasks[dir_name] - - # Apply --mine filter - if filter_mine and (t.assignee or "-") != developer: - return - - # Apply --status filter - if filter_status and t.status != filter_status: - return - - relative_path = f"{DIR_WORKFLOW}/{DIR_TASKS}/{dir_name}" - marker = "" - if relative_path == current_task: - marker = f" {colored('<- current', Colors.GREEN)}" - - # Children progress - progress = children_progress(t.children, all_statuses) - - # Package tag - pkg_tag = f" @{t.package}" if t.package else "" - - prefix = " " * indent + " - " - - if filter_mine: - print(f"{prefix}{dir_name}/ ({t.status}){pkg_tag}{progress}{marker}") - else: - print(f"{prefix}{dir_name}/ ({t.status}){pkg_tag}{progress} [{colored(t.assignee or '-', Colors.CYAN)}]{marker}") - count += 1 - - # Print children indented - for child_name in t.children: - if child_name in all_tasks: - _print_task(child_name, indent + 1) - - # Display only top-level tasks (those without a parent) - for dir_name in sorted(all_tasks.keys()): - if not all_tasks[dir_name].parent: - _print_task(dir_name) - - if count == 0: - if filter_mine: - print(" (no tasks assigned to you)") - else: - print(" (no active tasks)") - - print() - print(f"Total: {count} task(s)") - return 0 - - -# ============================================================================= -# Command: list-archive -# ============================================================================= - -def cmd_list_archive(args: argparse.Namespace) -> int: - """List archived tasks.""" - repo_root = get_repo_root() - tasks_dir = get_tasks_dir(repo_root) - archive_dir = tasks_dir / "archive" - month = args.month - - print(colored("Archived tasks:", Colors.BLUE)) - print() - - if month: - month_dir = archive_dir / month - if month_dir.is_dir(): - print(f"[{month}]") - for d in sorted(month_dir.iterdir()): - if d.is_dir(): - print(f" - {d.name}/") - else: - print(f" No archives for {month}") - else: - if archive_dir.is_dir(): - for month_dir in sorted(archive_dir.iterdir()): - if month_dir.is_dir(): - month_name = month_dir.name - count = sum(1 for d in month_dir.iterdir() if d.is_dir()) - print(f"[{month_name}] - {count} task(s)") - - return 0 - - -# ============================================================================= -# Command: create-pr (delegates to multi-agent script) -# ============================================================================= - -def cmd_create_pr(args: argparse.Namespace) -> int: - """Create PR from task - delegates to multi_agent/create_pr.py.""" - import subprocess - script_dir = Path(__file__).parent - create_pr_script = script_dir / "multi_agent" / "create_pr.py" - - cmd = [sys.executable, str(create_pr_script)] - if args.dir: - cmd.append(args.dir) - if args.dry_run: - cmd.append("--dry-run") - - result = subprocess.run(cmd) - return result.returncode - - -# ============================================================================= -# Help -# ============================================================================= - -def show_usage() -> None: - """Show usage help.""" - print("""Task Management Script for Multi-Agent Pipeline - -Usage: - python3 task.py create <title> Create new task directory - python3 task.py create <title> --package <pkg> Create task for a specific package - python3 task.py create <title> --parent <dir> Create task as child of parent - python3 task.py init-context <dir> <dev_type> Initialize jsonl files - python3 task.py init-context <dir> <type> --package <pkg> With explicit package - python3 task.py add-context <dir> <jsonl> <path> [reason] Add entry to jsonl - python3 task.py validate <dir> Validate jsonl files - python3 task.py list-context <dir> List jsonl entries - python3 task.py start <dir> Set as current task - python3 task.py finish Clear current task - python3 task.py set-branch <dir> <branch> Set git branch for multi-agent - python3 task.py set-scope <dir> <scope> Set scope for PR title - python3 task.py create-pr [dir] [--dry-run] Create PR from task - python3 task.py archive <task-name> Archive completed task - python3 task.py add-subtask <parent> <child> Link child task to parent - python3 task.py remove-subtask <parent> <child> Unlink child from parent - python3 task.py list [--mine] [--status <status>] List tasks - python3 task.py list-archive [YYYY-MM] List archived tasks - -Arguments: - dev_type: backend | frontend | fullstack | test | docs - -Monorepo options: - --package <pkg> Package name (validated against config.yaml packages) - -List options: - --mine, -m Show only tasks assigned to current developer - --status, -s <s> Filter by status (planning, in_progress, review, completed) - -Examples: - python3 task.py create "Add login feature" --slug add-login - python3 task.py create "Add login feature" --slug add-login --package cli - python3 task.py create "Child task" --slug child --parent .trellis/tasks/01-21-parent - python3 task.py init-context .trellis/tasks/01-21-add-login backend - python3 task.py init-context .trellis/tasks/01-21-add-login backend --package cli - python3 task.py add-context <dir> implement .trellis/spec/cli/backend/auth.md "Auth guidelines" - python3 task.py set-branch <dir> task/add-login - python3 task.py start .trellis/tasks/01-21-add-login - python3 task.py create-pr # Uses current task - python3 task.py create-pr <dir> --dry-run # Preview without changes - python3 task.py finish - python3 task.py archive add-login - python3 task.py add-subtask parent-task child-task # Link existing tasks - python3 task.py remove-subtask parent-task child-task - python3 task.py list # List all active tasks - python3 task.py list --mine # List my tasks only - python3 task.py list --mine --status in_progress # List my in-progress tasks -""") - - -# ============================================================================= -# Main Entry -# ============================================================================= - -def main() -> int: - """CLI entry point.""" - parser = argparse.ArgumentParser( - description="Task Management Script for Multi-Agent Pipeline", - formatter_class=argparse.RawDescriptionHelpFormatter, - ) - subparsers = parser.add_subparsers(dest="command", help="Commands") - - # create - p_create = subparsers.add_parser("create", help="Create new task") - p_create.add_argument("title", help="Task title") - p_create.add_argument("--slug", "-s", help="Task slug") - p_create.add_argument("--assignee", "-a", help="Assignee developer") - p_create.add_argument("--priority", "-p", default="P2", help="Priority (P0-P3)") - p_create.add_argument("--description", "-d", help="Task description") - p_create.add_argument("--parent", help="Parent task directory (establishes subtask link)") - p_create.add_argument("--package", help="Package name for monorepo projects") - - # init-context - p_init = subparsers.add_parser("init-context", help="Initialize context files") - p_init.add_argument("dir", help="Task directory") - p_init.add_argument("type", help="Dev type: backend|frontend|fullstack|test|docs") - p_init.add_argument("--package", help="Package name for monorepo projects") - - # add-context - p_add = subparsers.add_parser("add-context", help="Add context entry") - p_add.add_argument("dir", help="Task directory") - p_add.add_argument("file", help="JSONL file (implement|check|debug)") - p_add.add_argument("path", help="File path to add") - p_add.add_argument("reason", nargs="?", help="Reason for adding") - - # validate - p_validate = subparsers.add_parser("validate", help="Validate context files") - p_validate.add_argument("dir", help="Task directory") - - # list-context - p_listctx = subparsers.add_parser("list-context", help="List context entries") - p_listctx.add_argument("dir", help="Task directory") - - # start - p_start = subparsers.add_parser("start", help="Set current task") - p_start.add_argument("dir", help="Task directory") - - # finish - subparsers.add_parser("finish", help="Clear current task") - - # set-branch - p_branch = subparsers.add_parser("set-branch", help="Set git branch") - p_branch.add_argument("dir", help="Task directory") - p_branch.add_argument("branch", help="Branch name") - - # set-base-branch - p_base = subparsers.add_parser("set-base-branch", help="Set PR target branch") - p_base.add_argument("dir", help="Task directory") - p_base.add_argument("base_branch", help="Base branch name (PR target)") - - # set-scope - p_scope = subparsers.add_parser("set-scope", help="Set scope") - p_scope.add_argument("dir", help="Task directory") - p_scope.add_argument("scope", help="Scope name") - - # create-pr - p_pr = subparsers.add_parser("create-pr", help="Create PR") - p_pr.add_argument("dir", nargs="?", help="Task directory") - p_pr.add_argument("--dry-run", action="store_true", help="Dry run mode") - - # archive - p_archive = subparsers.add_parser("archive", help="Archive task") - p_archive.add_argument("name", help="Task name") - p_archive.add_argument("--no-commit", action="store_true", help="Skip auto git commit after archive") - - # list - p_list = subparsers.add_parser("list", help="List tasks") - p_list.add_argument("--mine", "-m", action="store_true", help="My tasks only") - p_list.add_argument("--status", "-s", help="Filter by status") - - # add-subtask - p_addsub = subparsers.add_parser("add-subtask", help="Link child task to parent") - p_addsub.add_argument("parent_dir", help="Parent task directory") - p_addsub.add_argument("child_dir", help="Child task directory") - - # remove-subtask - p_rmsub = subparsers.add_parser("remove-subtask", help="Unlink child task from parent") - p_rmsub.add_argument("parent_dir", help="Parent task directory") - p_rmsub.add_argument("child_dir", help="Child task directory") - - # list-archive - p_listarch = subparsers.add_parser("list-archive", help="List archived tasks") - p_listarch.add_argument("month", nargs="?", help="Month (YYYY-MM)") - - args = parser.parse_args() - - if not args.command: - show_usage() - return 1 - - commands = { - "create": cmd_create, - "init-context": cmd_init_context, - "add-context": cmd_add_context, - "validate": cmd_validate, - "list-context": cmd_list_context, - "start": cmd_start, - "finish": cmd_finish, - "set-branch": cmd_set_branch, - "set-base-branch": cmd_set_base_branch, - "set-scope": cmd_set_scope, - "create-pr": cmd_create_pr, - "archive": cmd_archive, - "add-subtask": cmd_add_subtask, - "remove-subtask": cmd_remove_subtask, - "list": cmd_list, - "list-archive": cmd_list_archive, - } - - if args.command in commands: - return commands[args.command](args) - else: - show_usage() - return 1 - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/.trellis/spec/backend/database-guidelines.md b/.trellis/spec/backend/database-guidelines.md deleted file mode 100644 index b61aa784..00000000 --- a/.trellis/spec/backend/database-guidelines.md +++ /dev/null @@ -1,51 +0,0 @@ -# Database Guidelines - -> Database patterns and conventions for this project. - ---- - -## Overview - -<!-- -Document your project's database conventions here. - -Questions to answer: -- What ORM/query library do you use? -- How are migrations managed? -- What are the naming conventions for tables/columns? -- How do you handle transactions? ---> - -(To be filled by the team) - ---- - -## Query Patterns - -<!-- How should queries be written? Batch operations? --> - -(To be filled by the team) - ---- - -## Migrations - -<!-- How to create and run migrations --> - -(To be filled by the team) - ---- - -## Naming Conventions - -<!-- Table names, column names, index names --> - -(To be filled by the team) - ---- - -## Common Mistakes - -<!-- Database-related mistakes your team has made --> - -(To be filled by the team) diff --git a/.trellis/spec/backend/directory-structure.md b/.trellis/spec/backend/directory-structure.md deleted file mode 100644 index 9bb253df..00000000 --- a/.trellis/spec/backend/directory-structure.md +++ /dev/null @@ -1,54 +0,0 @@ -# Directory Structure - -> How backend code is organized in this project. - ---- - -## Overview - -<!-- -Document your project's backend directory structure here. - -Questions to answer: -- How are modules/packages organized? -- Where does business logic live? -- Where are API endpoints defined? -- How are utilities and helpers organized? ---> - -(To be filled by the team) - ---- - -## Directory Layout - -``` -<!-- Replace with your actual structure --> -src/ -├── ... -└── ... -``` - ---- - -## Module Organization - -<!-- How should new features/modules be organized? --> - -(To be filled by the team) - ---- - -## Naming Conventions - -<!-- File and folder naming rules --> - -(To be filled by the team) - ---- - -## Examples - -<!-- Link to well-organized modules as examples --> - -(To be filled by the team) diff --git a/.trellis/spec/backend/error-handling.md b/.trellis/spec/backend/error-handling.md deleted file mode 100644 index bcd55337..00000000 --- a/.trellis/spec/backend/error-handling.md +++ /dev/null @@ -1,51 +0,0 @@ -# Error Handling - -> How errors are handled in this project. - ---- - -## Overview - -<!-- -Document your project's error handling conventions here. - -Questions to answer: -- What error types do you define? -- How are errors propagated? -- How are errors logged? -- How are errors returned to clients? ---> - -(To be filled by the team) - ---- - -## Error Types - -<!-- Custom error classes/types --> - -(To be filled by the team) - ---- - -## Error Handling Patterns - -<!-- Try-catch patterns, error propagation --> - -(To be filled by the team) - ---- - -## API Error Responses - -<!-- Standard error response format --> - -(To be filled by the team) - ---- - -## Common Mistakes - -<!-- Error handling mistakes your team has made --> - -(To be filled by the team) diff --git a/.trellis/spec/backend/index.md b/.trellis/spec/backend/index.md deleted file mode 100644 index 1c0b4c42..00000000 --- a/.trellis/spec/backend/index.md +++ /dev/null @@ -1,38 +0,0 @@ -# Backend Development Guidelines - -> Best practices for backend development in this project. - ---- - -## Overview - -This directory contains guidelines for backend development. Fill in each file with your project's specific conventions. - ---- - -## Guidelines Index - -| Guide | Description | Status | -|-------|-------------|--------| -| [Directory Structure](./directory-structure.md) | Module organization and file layout | To fill | -| [Database Guidelines](./database-guidelines.md) | ORM patterns, queries, migrations | To fill | -| [Error Handling](./error-handling.md) | Error types, handling strategies | To fill | -| [Quality Guidelines](./quality-guidelines.md) | Code standards, forbidden patterns | To fill | -| [Logging Guidelines](./logging-guidelines.md) | Structured logging, log levels | To fill | - ---- - -## How to Fill These Guidelines - -For each guideline file: - -1. Document your project's **actual conventions** (not ideals) -2. Include **code examples** from your codebase -3. List **forbidden patterns** and why -4. Add **common mistakes** your team has made - -The goal is to help AI assistants and new team members understand how YOUR project works. - ---- - -**Language**: All documentation should be written in **English**. diff --git a/.trellis/spec/backend/logging-guidelines.md b/.trellis/spec/backend/logging-guidelines.md deleted file mode 100644 index bb930df8..00000000 --- a/.trellis/spec/backend/logging-guidelines.md +++ /dev/null @@ -1,51 +0,0 @@ -# Logging Guidelines - -> How logging is done in this project. - ---- - -## Overview - -<!-- -Document your project's logging conventions here. - -Questions to answer: -- What logging library do you use? -- What are the log levels and when to use each? -- What should be logged? -- What should NOT be logged (PII, secrets)? ---> - -(To be filled by the team) - ---- - -## Log Levels - -<!-- When to use each level: debug, info, warn, error --> - -(To be filled by the team) - ---- - -## Structured Logging - -<!-- Log format, required fields --> - -(To be filled by the team) - ---- - -## What to Log - -<!-- Important events to log --> - -(To be filled by the team) - ---- - -## What NOT to Log - -<!-- Sensitive data, PII, secrets --> - -(To be filled by the team) diff --git a/.trellis/spec/backend/quality-guidelines.md b/.trellis/spec/backend/quality-guidelines.md deleted file mode 100644 index c1e1065a..00000000 --- a/.trellis/spec/backend/quality-guidelines.md +++ /dev/null @@ -1,51 +0,0 @@ -# Quality Guidelines - -> Code quality standards for backend development. - ---- - -## Overview - -<!-- -Document your project's quality standards here. - -Questions to answer: -- What patterns are forbidden? -- What linting rules do you enforce? -- What are your testing requirements? -- What code review standards apply? ---> - -(To be filled by the team) - ---- - -## Forbidden Patterns - -<!-- Patterns that should never be used and why --> - -(To be filled by the team) - ---- - -## Required Patterns - -<!-- Patterns that must always be used --> - -(To be filled by the team) - ---- - -## Testing Requirements - -<!-- What level of testing is expected --> - -(To be filled by the team) - ---- - -## Code Review Checklist - -<!-- What reviewers should check --> - -(To be filled by the team) diff --git a/.trellis/spec/frontend/component-guidelines.md b/.trellis/spec/frontend/component-guidelines.md deleted file mode 100644 index 6836c3fb..00000000 --- a/.trellis/spec/frontend/component-guidelines.md +++ /dev/null @@ -1,59 +0,0 @@ -# Component Guidelines - -> How components are built in this project. - ---- - -## Overview - -<!-- -Document your project's component conventions here. - -Questions to answer: -- What component patterns do you use? -- How are props defined? -- How do you handle composition? -- What accessibility standards apply? ---> - -(To be filled by the team) - ---- - -## Component Structure - -<!-- Standard structure of a component file --> - -(To be filled by the team) - ---- - -## Props Conventions - -<!-- How props should be defined and typed --> - -(To be filled by the team) - ---- - -## Styling Patterns - -<!-- How styles are applied (CSS modules, styled-components, Tailwind, etc.) --> - -(To be filled by the team) - ---- - -## Accessibility - -<!-- A11y requirements and patterns --> - -(To be filled by the team) - ---- - -## Common Mistakes - -<!-- Component-related mistakes your team has made --> - -(To be filled by the team) diff --git a/.trellis/spec/frontend/directory-structure.md b/.trellis/spec/frontend/directory-structure.md deleted file mode 100644 index 1eb57d16..00000000 --- a/.trellis/spec/frontend/directory-structure.md +++ /dev/null @@ -1,54 +0,0 @@ -# Directory Structure - -> How frontend code is organized in this project. - ---- - -## Overview - -<!-- -Document your project's frontend directory structure here. - -Questions to answer: -- Where do components live? -- How are features/modules organized? -- Where are shared utilities? -- How are assets organized? ---> - -(To be filled by the team) - ---- - -## Directory Layout - -``` -<!-- Replace with your actual structure --> -src/ -├── ... -└── ... -``` - ---- - -## Module Organization - -<!-- How should new features be organized? --> - -(To be filled by the team) - ---- - -## Naming Conventions - -<!-- File and folder naming rules --> - -(To be filled by the team) - ---- - -## Examples - -<!-- Link to well-organized modules as examples --> - -(To be filled by the team) diff --git a/.trellis/spec/frontend/hook-guidelines.md b/.trellis/spec/frontend/hook-guidelines.md deleted file mode 100644 index 60c6bb6a..00000000 --- a/.trellis/spec/frontend/hook-guidelines.md +++ /dev/null @@ -1,51 +0,0 @@ -# Hook Guidelines - -> How hooks are used in this project. - ---- - -## Overview - -<!-- -Document your project's hook conventions here. - -Questions to answer: -- What custom hooks do you have? -- How do you handle data fetching? -- What are the naming conventions? -- How do you share stateful logic? ---> - -(To be filled by the team) - ---- - -## Custom Hook Patterns - -<!-- How to create and structure custom hooks --> - -(To be filled by the team) - ---- - -## Data Fetching - -<!-- How data fetching is handled (React Query, SWR, etc.) --> - -(To be filled by the team) - ---- - -## Naming Conventions - -<!-- Hook naming rules (use*, etc.) --> - -(To be filled by the team) - ---- - -## Common Mistakes - -<!-- Hook-related mistakes your team has made --> - -(To be filled by the team) diff --git a/.trellis/spec/frontend/index.md b/.trellis/spec/frontend/index.md deleted file mode 100644 index a5e51b8b..00000000 --- a/.trellis/spec/frontend/index.md +++ /dev/null @@ -1,39 +0,0 @@ -# Frontend Development Guidelines - -> Best practices for frontend development in this project. - ---- - -## Overview - -This directory contains guidelines for frontend development. Fill in each file with your project's specific conventions. - ---- - -## Guidelines Index - -| Guide | Description | Status | -|-------|-------------|--------| -| [Directory Structure](./directory-structure.md) | Module organization and file layout | To fill | -| [Component Guidelines](./component-guidelines.md) | Component patterns, props, composition | To fill | -| [Hook Guidelines](./hook-guidelines.md) | Custom hooks, data fetching patterns | To fill | -| [State Management](./state-management.md) | Local state, global state, server state | To fill | -| [Quality Guidelines](./quality-guidelines.md) | Code standards, forbidden patterns | To fill | -| [Type Safety](./type-safety.md) | Type patterns, validation | To fill | - ---- - -## How to Fill These Guidelines - -For each guideline file: - -1. Document your project's **actual conventions** (not ideals) -2. Include **code examples** from your codebase -3. List **forbidden patterns** and why -4. Add **common mistakes** your team has made - -The goal is to help AI assistants and new team members understand how YOUR project works. - ---- - -**Language**: All documentation should be written in **English**. diff --git a/.trellis/spec/frontend/quality-guidelines.md b/.trellis/spec/frontend/quality-guidelines.md deleted file mode 100644 index 05a14112..00000000 --- a/.trellis/spec/frontend/quality-guidelines.md +++ /dev/null @@ -1,51 +0,0 @@ -# Quality Guidelines - -> Code quality standards for frontend development. - ---- - -## Overview - -<!-- -Document your project's quality standards here. - -Questions to answer: -- What patterns are forbidden? -- What linting rules do you enforce? -- What are your testing requirements? -- What code review standards apply? ---> - -(To be filled by the team) - ---- - -## Forbidden Patterns - -<!-- Patterns that should never be used and why --> - -(To be filled by the team) - ---- - -## Required Patterns - -<!-- Patterns that must always be used --> - -(To be filled by the team) - ---- - -## Testing Requirements - -<!-- What level of testing is expected --> - -(To be filled by the team) - ---- - -## Code Review Checklist - -<!-- What reviewers should check --> - -(To be filled by the team) diff --git a/.trellis/spec/frontend/state-management.md b/.trellis/spec/frontend/state-management.md deleted file mode 100644 index b4fc9662..00000000 --- a/.trellis/spec/frontend/state-management.md +++ /dev/null @@ -1,51 +0,0 @@ -# State Management - -> How state is managed in this project. - ---- - -## Overview - -<!-- -Document your project's state management conventions here. - -Questions to answer: -- What state management solution do you use? -- How is local vs global state decided? -- How do you handle server state? -- What are the patterns for derived state? ---> - -(To be filled by the team) - ---- - -## State Categories - -<!-- Local state, global state, server state, URL state --> - -(To be filled by the team) - ---- - -## When to Use Global State - -<!-- Criteria for promoting state to global --> - -(To be filled by the team) - ---- - -## Server State - -<!-- How server data is cached and synchronized --> - -(To be filled by the team) - ---- - -## Common Mistakes - -<!-- State management mistakes your team has made --> - -(To be filled by the team) diff --git a/.trellis/spec/frontend/type-safety.md b/.trellis/spec/frontend/type-safety.md deleted file mode 100644 index 1b1b19e0..00000000 --- a/.trellis/spec/frontend/type-safety.md +++ /dev/null @@ -1,51 +0,0 @@ -# Type Safety - -> Type safety patterns in this project. - ---- - -## Overview - -<!-- -Document your project's type safety conventions here. - -Questions to answer: -- What type system do you use? -- How are types organized? -- What validation library do you use? -- How do you handle type inference? ---> - -(To be filled by the team) - ---- - -## Type Organization - -<!-- Where types are defined, shared types vs local types --> - -(To be filled by the team) - ---- - -## Validation - -<!-- Runtime validation patterns (Zod, Yup, io-ts, etc.) --> - -(To be filled by the team) - ---- - -## Common Patterns - -<!-- Type utilities, generics, type guards --> - -(To be filled by the team) - ---- - -## Forbidden Patterns - -<!-- any, type assertions, etc. --> - -(To be filled by the team) diff --git a/.trellis/spec/guides/code-reuse-thinking-guide.md b/.trellis/spec/guides/code-reuse-thinking-guide.md deleted file mode 100644 index f9d5f99b..00000000 --- a/.trellis/spec/guides/code-reuse-thinking-guide.md +++ /dev/null @@ -1,105 +0,0 @@ -# Code Reuse Thinking Guide - -> **Purpose**: Stop and think before creating new code - does it already exist? - ---- - -## The Problem - -**Duplicated code is the #1 source of inconsistency bugs.** - -When you copy-paste or rewrite existing logic: -- Bug fixes don't propagate -- Behavior diverges over time -- Codebase becomes harder to understand - ---- - -## Before Writing New Code - -### Step 1: Search First - -```bash -# Search for similar function names -grep -r "functionName" . - -# Search for similar logic -grep -r "keyword" . -``` - -### Step 2: Ask These Questions - -| Question | If Yes... | -|----------|-----------| -| Does a similar function exist? | Use or extend it | -| Is this pattern used elsewhere? | Follow the existing pattern | -| Could this be a shared utility? | Create it in the right place | -| Am I copying code from another file? | **STOP** - extract to shared | - ---- - -## Common Duplication Patterns - -### Pattern 1: Copy-Paste Functions - -**Bad**: Copying a validation function to another file - -**Good**: Extract to shared utilities, import where needed - -### Pattern 2: Similar Components - -**Bad**: Creating a new component that's 80% similar to existing - -**Good**: Extend existing component with props/variants - -### Pattern 3: Repeated Constants - -**Bad**: Defining the same constant in multiple files - -**Good**: Single source of truth, import everywhere - ---- - -## When to Abstract - -**Abstract when**: -- Same code appears 3+ times -- Logic is complex enough to have bugs -- Multiple people might need this - -**Don't abstract when**: -- Only used once -- Trivial one-liner -- Abstraction would be more complex than duplication - ---- - -## After Batch Modifications - -When you've made similar changes to multiple files: - -1. **Review**: Did you catch all instances? -2. **Search**: Run grep to find any missed -3. **Consider**: Should this be abstracted? - ---- - -## Gotcha: Asymmetric Mechanisms Producing Same Output - -**Problem**: When two different mechanisms must produce the same file set (e.g., recursive directory copy for init vs. manual `files.set()` for update), structural changes (renaming, moving, adding subdirectories) only propagate through the automatic mechanism. The manual one silently drifts. - -**Symptom**: Init works perfectly, but update creates files at wrong paths or misses files entirely. - -**Prevention checklist**: -- [ ] When migrating directory structures, search for ALL code paths that reference the old structure -- [ ] If one path is auto-derived (glob/copy) and another is manually listed, the manual one needs updating -- [ ] Add a regression test that compares outputs from both mechanisms - ---- - -## Checklist Before Commit - -- [ ] Searched for existing similar code -- [ ] No copy-pasted logic that should be shared -- [ ] Constants defined in one place -- [ ] Similar patterns follow same structure diff --git a/.trellis/spec/guides/cross-layer-thinking-guide.md b/.trellis/spec/guides/cross-layer-thinking-guide.md deleted file mode 100644 index 2d1dee39..00000000 --- a/.trellis/spec/guides/cross-layer-thinking-guide.md +++ /dev/null @@ -1,94 +0,0 @@ -# Cross-Layer Thinking Guide - -> **Purpose**: Think through data flow across layers before implementing. - ---- - -## The Problem - -**Most bugs happen at layer boundaries**, not within layers. - -Common cross-layer bugs: -- API returns format A, frontend expects format B -- Database stores X, service transforms to Y, but loses data -- Multiple layers implement the same logic differently - ---- - -## Before Implementing Cross-Layer Features - -### Step 1: Map the Data Flow - -Draw out how data moves: - -``` -Source → Transform → Store → Retrieve → Transform → Display -``` - -For each arrow, ask: -- What format is the data in? -- What could go wrong? -- Who is responsible for validation? - -### Step 2: Identify Boundaries - -| Boundary | Common Issues | -|----------|---------------| -| API ↔ Service | Type mismatches, missing fields | -| Service ↔ Database | Format conversions, null handling | -| Backend ↔ Frontend | Serialization, date formats | -| Component ↔ Component | Props shape changes | - -### Step 3: Define Contracts - -For each boundary: -- What is the exact input format? -- What is the exact output format? -- What errors can occur? - ---- - -## Common Cross-Layer Mistakes - -### Mistake 1: Implicit Format Assumptions - -**Bad**: Assuming date format without checking - -**Good**: Explicit format conversion at boundaries - -### Mistake 2: Scattered Validation - -**Bad**: Validating the same thing in multiple layers - -**Good**: Validate once at the entry point - -### Mistake 3: Leaky Abstractions - -**Bad**: Component knows about database schema - -**Good**: Each layer only knows its neighbors - ---- - -## Checklist for Cross-Layer Features - -Before implementation: -- [ ] Mapped the complete data flow -- [ ] Identified all layer boundaries -- [ ] Defined format at each boundary -- [ ] Decided where validation happens - -After implementation: -- [ ] Tested with edge cases (null, empty, invalid) -- [ ] Verified error handling at each boundary -- [ ] Checked data survives round-trip - ---- - -## When to Create Flow Documentation - -Create detailed flow docs when: -- Feature spans 3+ layers -- Multiple teams are involved -- Data format is complex -- Feature has caused bugs before diff --git a/.trellis/spec/guides/index.md b/.trellis/spec/guides/index.md deleted file mode 100644 index 147c79bd..00000000 --- a/.trellis/spec/guides/index.md +++ /dev/null @@ -1,79 +0,0 @@ -# Thinking Guides - -> **Purpose**: Expand your thinking to catch things you might not have considered. - ---- - -## Why Thinking Guides? - -**Most bugs and tech debt come from "didn't think of that"**, not from lack of skill: - -- Didn't think about what happens at layer boundaries → cross-layer bugs -- Didn't think about code patterns repeating → duplicated code everywhere -- Didn't think about edge cases → runtime errors -- Didn't think about future maintainers → unreadable code - -These guides help you **ask the right questions before coding**. - ---- - -## Available Guides - -| Guide | Purpose | When to Use | -|-------|---------|-------------| -| [Code Reuse Thinking Guide](./code-reuse-thinking-guide.md) | Identify patterns and reduce duplication | When you notice repeated patterns | -| [Cross-Layer Thinking Guide](./cross-layer-thinking-guide.md) | Think through data flow across layers | Features spanning multiple layers | - ---- - -## Quick Reference: Thinking Triggers - -### When to Think About Cross-Layer Issues - -- [ ] Feature touches 3+ layers (API, Service, Component, Database) -- [ ] Data format changes between layers -- [ ] Multiple consumers need the same data -- [ ] You're not sure where to put some logic - -→ Read [Cross-Layer Thinking Guide](./cross-layer-thinking-guide.md) - -### When to Think About Code Reuse - -- [ ] You're writing similar code to something that exists -- [ ] You see the same pattern repeated 3+ times -- [ ] You're adding a new field to multiple places -- [ ] **You're modifying any constant or config** -- [ ] **You're creating a new utility/helper function** ← Search first! - -→ Read [Code Reuse Thinking Guide](./code-reuse-thinking-guide.md) - ---- - -## Pre-Modification Rule (CRITICAL) - -> **Before changing ANY value, ALWAYS search first!** - -```bash -# Search for the value you're about to change -grep -r "value_to_change" . -``` - -This single habit prevents most "forgot to update X" bugs. - ---- - -## How to Use This Directory - -1. **Before coding**: Skim the relevant thinking guide -2. **During coding**: If something feels repetitive or complex, check the guides -3. **After bugs**: Add new insights to the relevant guide (learn from mistakes) - ---- - -## Contributing - -Found a new "didn't think of that" moment? Add it to the relevant guide. - ---- - -**Core Principle**: 30 minutes of thinking saves 3 hours of debugging. diff --git a/.trellis/tasks/00-bootstrap-guidelines/prd.md b/.trellis/tasks/00-bootstrap-guidelines/prd.md deleted file mode 100644 index f1dec075..00000000 --- a/.trellis/tasks/00-bootstrap-guidelines/prd.md +++ /dev/null @@ -1,113 +0,0 @@ -# Bootstrap: Fill Project Development Guidelines - -## Purpose - -Welcome to Trellis! This is your first task. - -AI agents use `.trellis/spec/` to understand YOUR project's coding conventions. -**Starting from scratch = AI writes generic code that doesn't match your project style.** - -Filling these guidelines is a one-time setup that pays off for every future AI session. - ---- - -## Your Task - -Fill in the guideline files based on your **existing codebase**. - - -### Backend Guidelines - -| File | What to Document | -|------|------------------| -| `.trellis/spec/backend/directory-structure.md` | Where different file types go (routes, services, utils) | -| `.trellis/spec/backend/database-guidelines.md` | ORM, migrations, query patterns, naming conventions | -| `.trellis/spec/backend/error-handling.md` | How errors are caught, logged, and returned | -| `.trellis/spec/backend/logging-guidelines.md` | Log levels, format, what to log | -| `.trellis/spec/backend/quality-guidelines.md` | Code review standards, testing requirements | - - -### Frontend Guidelines - -| File | What to Document | -|------|------------------| -| `.trellis/spec/frontend/directory-structure.md` | Component/page/hook organization | -| `.trellis/spec/frontend/component-guidelines.md` | Component patterns, props conventions | -| `.trellis/spec/frontend/hook-guidelines.md` | Custom hook naming, patterns | -| `.trellis/spec/frontend/state-management.md` | State library, patterns, what goes where | -| `.trellis/spec/frontend/type-safety.md` | TypeScript conventions, type organization | -| `.trellis/spec/frontend/quality-guidelines.md` | Linting, testing, accessibility | - - -### Thinking Guides (Optional) - -The `.trellis/spec/guides/` directory contains thinking guides that are already -filled with general best practices. You can customize them for your project if needed. - ---- - -## How to Fill Guidelines - -### Step 0: Import from Existing Specs (Recommended) - -Many projects already have coding conventions documented. **Check these first** before writing from scratch: - -| File / Directory | Tool | -|------|------| -| `CLAUDE.md` / `CLAUDE.local.md` | Claude Code | -| `AGENTS.md` | Codex / Claude Code / agent-compatible tools | -| `.cursorrules` | Cursor | -| `.cursor/rules/*.mdc` | Cursor (rules directory) | -| `.windsurfrules` | Windsurf | -| `.clinerules` | Cline | -| `.roomodes` | Roo Code | -| `.github/copilot-instructions.md` | GitHub Copilot | -| `.vscode/settings.json` → `github.copilot.chat.codeGeneration.instructions` | VS Code Copilot | -| `CONVENTIONS.md` / `.aider.conf.yml` | aider | -| `CONTRIBUTING.md` | General project conventions | -| `.editorconfig` | Editor formatting rules | - -If any of these exist, read them first and extract the relevant coding conventions into the corresponding `.trellis/spec/` files. This saves significant effort compared to writing everything from scratch. - -### Step 1: Analyze the Codebase - -Ask AI to help discover patterns from actual code: - -- "Read all existing config files (CLAUDE.md, .cursorrules, etc.) and extract coding conventions into .trellis/spec/" -- "Analyze my codebase and document the patterns you see" -- "Find error handling / component / API patterns and document them" - -### Step 2: Document Reality, Not Ideals - -Write what your codebase **actually does**, not what you wish it did. -AI needs to match existing patterns, not introduce new ones. - -- **Look at existing code** - Find 2-3 examples of each pattern -- **Include file paths** - Reference real files as examples -- **List anti-patterns** - What does your team avoid? - ---- - -## Completion Checklist - -- [ ] Guidelines filled for your project type -- [ ] At least 2-3 real code examples in each guideline -- [ ] Anti-patterns documented - -When done: - -```bash -python3 ./.trellis/scripts/task.py finish -python3 ./.trellis/scripts/task.py archive 00-bootstrap-guidelines -``` - ---- - -## Why This Matters - -After completing this task: - -1. AI will write code that matches your project style -2. Relevant `/trellis:before-*-dev` commands will inject real context -3. `/trellis:check-*` commands will validate against your actual standards -4. Future developers (human or AI) will onboard faster diff --git a/.trellis/tasks/00-bootstrap-guidelines/task.json b/.trellis/tasks/00-bootstrap-guidelines/task.json deleted file mode 100644 index dc140659..00000000 --- a/.trellis/tasks/00-bootstrap-guidelines/task.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "id": "00-bootstrap-guidelines", - "name": "Bootstrap Guidelines", - "description": "Fill in project development guidelines for AI agents", - "status": "in_progress", - "dev_type": "docs", - "priority": "P1", - "creator": "ShengLong", - "assignee": "ShengLong", - "createdAt": "2026-04-20", - "completedAt": null, - "commit": null, - "subtasks": [ - { - "name": "Fill backend guidelines", - "status": "pending" - }, - { - "name": "Fill frontend guidelines", - "status": "pending" - }, - { - "name": "Add code examples", - "status": "pending" - } - ], - "children": [], - "parent": null, - "relatedFiles": [ - ".trellis/spec/backend/", - ".trellis/spec/frontend/" - ], - "notes": "First-time setup task created by trellis init (fullstack project)", - "meta": {} -} \ No newline at end of file diff --git a/.trellis/workflow.md b/.trellis/workflow.md deleted file mode 100644 index 28239e81..00000000 --- a/.trellis/workflow.md +++ /dev/null @@ -1,416 +0,0 @@ -# Development Workflow - -> Based on [Effective Harnesses for Long-Running Agents](https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents) - ---- - -## Table of Contents - -1. [Quick Start (Do This First)](#quick-start-do-this-first) -2. [Workflow Overview](#workflow-overview) -3. [Session Start Process](#session-start-process) -4. [Development Process](#development-process) -5. [Session End](#session-end) -6. [File Descriptions](#file-descriptions) -7. [Best Practices](#best-practices) - ---- - -## Quick Start (Do This First) - -### Step 0: Initialize Developer Identity (First Time Only) - -> **Multi-developer support**: Each developer/Agent needs to initialize their identity first - -```bash -# Check if already initialized -python3 ./.trellis/scripts/get_developer.py - -# If not initialized, run: -python3 ./.trellis/scripts/init_developer.py <your-name> -# Example: python3 ./.trellis/scripts/init_developer.py cursor-agent -``` - -This creates: -- `.trellis/.developer` - Your identity file (gitignored, not committed) -- `.trellis/workspace/<your-name>/` - Your personal workspace directory - -**Naming suggestions**: -- Human developers: Use your name, e.g., `john-doe` -- Cursor AI: `cursor-agent` or `cursor-<task>` -- Claude Code: `claude-agent` or `claude-<task>` -- iFlow cli: `iflow-agent` or `iflow-<task>` - -### Step 1: Understand Current Context - -```bash -# Get full context in one command -python3 ./.trellis/scripts/get_context.py - -# Or check manually: -python3 ./.trellis/scripts/get_developer.py # Your identity -python3 ./.trellis/scripts/task.py list # Active tasks -git status && git log --oneline -10 # Git state -``` - -### Step 2: Read Project Guidelines [MANDATORY] - -**CRITICAL**: Read guidelines before writing any code: - -```bash -# Discover available packages and spec layers -python3 ./.trellis/scripts/get_context.py --mode packages - -# Read the spec index for each relevant module -cat .trellis/spec/<package>/<layer>/index.md - -# Always read shared guides -cat .trellis/spec/guides/index.md -``` - -**Why this matters?** -- Understand which spec layers apply to your task -- Know coding standards for the packages you'll modify -- Learn the overall code quality requirements - -### Step 3: Before Coding - Read Specific Guidelines (Required) - -Based on your task, read the **detailed** guideline files listed in each spec index's **Pre-Development Checklist**: - -```bash -# The index points to specific files — read those, not just the index -cat .trellis/spec/<package>/<layer>/error-handling.md -cat .trellis/spec/<package>/<layer>/conventions.md -# etc. — based on what the Pre-Development Checklist lists -``` - ---- - -## Workflow Overview - -### Core Principles - -1. **Read Before Write** - Understand context before starting -2. **Follow Standards** - [!] **MUST read `.trellis/spec/` guidelines before coding** -3. **Incremental Development** - Complete one task at a time -4. **Record Promptly** - Update tracking files immediately after completion -5. **Document Limits** - [!] **Max 2000 lines per journal document** - -### File System - -``` -.trellis/ -|-- .developer # Developer identity (gitignored) -|-- scripts/ -| |-- __init__.py # Python package init -| |-- common/ # Shared utilities (Python) -| | |-- __init__.py -| | |-- paths.py # Path utilities -| | |-- developer.py # Developer management -| | +-- git_context.py # Git context implementation -| |-- multi_agent/ # Multi-agent pipeline scripts -| | |-- __init__.py -| | |-- start.py # Start worktree agent -| | |-- status.py # Monitor agent status -| | |-- create_pr.py # Create PR -| | +-- cleanup.py # Cleanup worktree -| |-- init_developer.py # Initialize developer identity -| |-- get_developer.py # Get current developer name -| |-- task.py # Manage tasks -| |-- get_context.py # Get session context -| +-- add_session.py # One-click session recording -|-- workspace/ # Developer workspaces -| |-- index.md # Workspace index + Session template -| +-- {developer}/ # Per-developer directories -| |-- index.md # Personal index (with @@@auto markers) -| +-- journal-N.md # Journal files (sequential numbering) -|-- tasks/ # Task tracking -| +-- {MM}-{DD}-{name}/ -| +-- task.json -|-- spec/ # [!] MUST READ before coding -| |-- frontend/ # Frontend guidelines (if applicable) -| | |-- index.md # Start here - guidelines index -| | +-- *.md # Topic-specific docs -| |-- backend/ # Backend guidelines (if applicable) -| | |-- index.md # Start here - guidelines index -| | +-- *.md # Topic-specific docs -| +-- guides/ # Thinking guides -| |-- index.md # Guides index -| |-- cross-layer-thinking-guide.md # Pre-implementation checklist -| +-- *.md # Other guides -+-- workflow.md # This document -``` - ---- - -## Session Start Process - -### Step 1: Get Session Context - -Use the unified context script: - -```bash -# Get all context in one command -python3 ./.trellis/scripts/get_context.py - -# Or get JSON format -python3 ./.trellis/scripts/get_context.py --json -``` - -### Step 2: Read Development Guidelines [!] REQUIRED - -**[!] CRITICAL: MUST read guidelines before writing any code** - -Based on what you'll develop, read the corresponding guidelines: - -```bash -# Discover available packages and spec layers -python3 ./.trellis/scripts/get_context.py --mode packages - -# Read spec indexes for relevant modules -cat .trellis/spec/<package>/<layer>/index.md - -# For cross-layer features -cat .trellis/spec/guides/cross-layer-thinking-guide.md -``` - -### Step 3: Select Task to Develop - -Use the task management script: - -```bash -# List active tasks -python3 ./.trellis/scripts/task.py list - -# Create new task (creates directory with task.json) -python3 ./.trellis/scripts/task.py create "<title>" --slug <task-name> -``` - ---- - -## Development Process - -### Task Development Flow - -``` -1. Create or select task - --> python3 ./.trellis/scripts/task.py create "<title>" --slug <name> or list - -2. Start task (mark as current) - --> python3 ./.trellis/scripts/task.py start <name> - --> Writes .trellis/.current-task; future sessions see it in <current-state> - -3. Write code according to guidelines - --> Read .trellis/spec/ docs relevant to your task - --> For cross-layer: read .trellis/spec/guides/ - -4. Self-test - --> Run project's lint/test commands (see spec docs) - --> Manual feature testing - -5. Commit code - --> git add <files> - --> git commit -m "type(scope): description" - Format: feat/fix/docs/refactor/test/chore - -6. Record session (one command) - --> python3 ./.trellis/scripts/add_session.py --title "Title" --commit "hash" - -7. Finish task (clear current) - --> python3 ./.trellis/scripts/task.py finish - --> Only when the task is fully done; otherwise leave it set so the - next session resumes where you left off -``` - -### Code Quality Checklist - -**Must pass before commit**: -- [OK] Lint checks pass (project-specific command) -- [OK] Type checks pass (if applicable) -- [OK] Manual feature testing passes - -**Project-specific checks**: -- See `.trellis/spec/<package>/<layer>/quality-guidelines.md` for package-specific checks - ---- - -## Session End - -### One-Click Session Recording - -After code is committed, use: - -```bash -python3 ./.trellis/scripts/add_session.py \ - --title "Session Title" \ - --commit "abc1234" \ - --summary "Brief summary" -``` - -This automatically: -1. Detects current journal file -2. Creates new file if 2000-line limit exceeded -3. Appends session content -4. Updates index.md (sessions count, history table) - -### Pre-end Checklist - -Use `/trellis:finish-work` command to run through: -1. [OK] All code committed, commit message follows convention -2. [OK] Session recorded via `add_session.py` -3. [OK] No lint/test errors -4. [OK] Working directory clean (or WIP noted) -5. [OK] Spec docs updated if needed - ---- - -## File Descriptions - -### 1. workspace/ - Developer Workspaces - -**Purpose**: Record each AI Agent session's work content - -**Structure** (Multi-developer support): -``` -workspace/ -|-- index.md # Main index (Active Developers table) -+-- {developer}/ # Per-developer directory - |-- index.md # Personal index (with @@@auto markers) - +-- journal-N.md # Journal files (sequential: 1, 2, 3...) -``` - -**When to update**: -- [OK] End of each session -- [OK] Complete important task -- [OK] Fix important bug - -### 2. spec/ - Development Guidelines - -**Purpose**: Documented standards for consistent development - -**Structure** (Multi-doc format): -``` -spec/ -|-- frontend/ # Frontend docs (if applicable) -| |-- index.md # Start here -| +-- *.md # Topic-specific docs -|-- backend/ # Backend docs (if applicable) -| |-- index.md # Start here -| +-- *.md # Topic-specific docs -+-- guides/ # Thinking guides - |-- index.md # Start here - +-- *.md # Guide-specific docs -``` - -**When to update**: -- [OK] New pattern discovered -- [OK] Bug fixed that reveals missing guidance -- [OK] New convention established - -### 3. Tasks - Task Tracking - -Each task is a directory containing `task.json`: - -``` -tasks/ -|-- 01-21-my-task/ -| +-- task.json -+-- archive/ - +-- 2026-01/ - +-- 01-15-old-task/ - +-- task.json -``` - -**Commands**: -```bash -python3 ./.trellis/scripts/task.py create "<title>" [--slug <name>] # Create task directory -python3 ./.trellis/scripts/task.py start <name> # Set as current task (writes .current-task, triggers after_start hooks) -python3 ./.trellis/scripts/task.py finish # Clear current task (triggers after_finish hooks) -python3 ./.trellis/scripts/task.py archive <name> # Archive to archive/{year-month}/ -python3 ./.trellis/scripts/task.py list # List active tasks -python3 ./.trellis/scripts/task.py list-archive # List archived tasks -``` - -**Current task mechanism**: `task.py start <name>` writes the selected task path to `.trellis/.current-task`. The SessionStart hook reads this file to inject `## CURRENT TASK` into every new session's context, so the AI immediately knows what you're working on without being told. Run `task.py finish` when you're done — subsequent sessions will show `(none)` until you start another task. - ---- - -## Best Practices - -### [OK] DO - Should Do - -1. **Before session start**: - - Run `python3 ./.trellis/scripts/get_context.py` for full context - - [!] **MUST read** relevant `.trellis/spec/` docs - -2. **During development**: - - [!] **Follow** `.trellis/spec/` guidelines - - For cross-layer features, use `/trellis:check-cross-layer` - - Develop only one task at a time - - Run lint and tests frequently - -3. **After development complete**: - - Use `/trellis:finish-work` for completion checklist - - After fix bug, use `/trellis:break-loop` for deep analysis - - Human commits after testing passes - - Use `add_session.py` to record progress - -### [X] DON'T - Should Not Do - -1. [!] **Don't** skip reading `.trellis/spec/` guidelines -2. [!] **Don't** let journal single file exceed 2000 lines -3. **Don't** develop multiple unrelated tasks simultaneously -4. **Don't** commit code with lint/test errors -5. **Don't** forget to update spec docs after learning something -6. [!] **Don't** execute `git commit` - AI should not commit code - ---- - -## Quick Reference - -### Must-read Before Development - -| Task Type | Must-read Document | -|-----------|-------------------| -| Frontend work | `frontend/index.md` → relevant docs | -| Backend work | `backend/index.md` → relevant docs | -| Cross-Layer Feature | `guides/cross-layer-thinking-guide.md` | - -### Commit Convention - -```bash -git commit -m "type(scope): description" -``` - -**Type**: feat, fix, docs, refactor, test, chore -**Scope**: Module name (e.g., auth, api, ui) - -### Common Commands - -```bash -# Session management -python3 ./.trellis/scripts/get_context.py # Get full context -python3 ./.trellis/scripts/add_session.py # Record session - -# Task management -python3 ./.trellis/scripts/task.py list # List tasks -python3 ./.trellis/scripts/task.py create "<title>" # Create task - -# Slash commands -/trellis:finish-work # Pre-commit checklist -/trellis:break-loop # Post-debug analysis -/trellis:check-cross-layer # Cross-layer verification -``` - ---- - -## Summary - -Following this workflow ensures: -- [OK] Continuity across multiple sessions -- [OK] Consistent code quality -- [OK] Trackable progress -- [OK] Knowledge accumulation in spec docs -- [OK] Transparent team collaboration - -**Core Philosophy**: Read before write, follow standards, record promptly, capture learnings diff --git a/.trellis/workspace/ShengLong/index.md b/.trellis/workspace/ShengLong/index.md deleted file mode 100644 index a000a2b9..00000000 --- a/.trellis/workspace/ShengLong/index.md +++ /dev/null @@ -1,40 +0,0 @@ -# Workspace Index - ShengLong - -> Journal tracking for AI development sessions. - ---- - -## Current Status - -<!-- @@@auto:current-status --> -- **Active File**: `journal-1.md` -- **Total Sessions**: 0 -- **Last Active**: - -<!-- @@@/auto:current-status --> - ---- - -## Active Documents - -<!-- @@@auto:active-documents --> -| File | Lines | Status | -|------|-------|--------| -| `journal-1.md` | ~0 | Active | -<!-- @@@/auto:active-documents --> - ---- - -## Session History - -<!-- @@@auto:session-history --> -| # | Date | Title | Commits | Branch | -|---|------|-------|---------|--------| -<!-- @@@/auto:session-history --> - ---- - -## Notes - -- Sessions are appended to journal files -- New journal file created when current exceeds 2000 lines -- Use `add_session.py` to record sessions diff --git a/.trellis/workspace/ShengLong/journal-1.md b/.trellis/workspace/ShengLong/journal-1.md deleted file mode 100644 index 1d75ec8e..00000000 --- a/.trellis/workspace/ShengLong/journal-1.md +++ /dev/null @@ -1,7 +0,0 @@ -# Journal - ShengLong (Part 1) - -> AI development session journal -> Started: 2026-04-20 - ---- - diff --git a/.trellis/workspace/index.md b/.trellis/workspace/index.md deleted file mode 100644 index f132a77e..00000000 --- a/.trellis/workspace/index.md +++ /dev/null @@ -1,125 +0,0 @@ -# Workspace Index - -> Records of all AI Agent work records across all developers - ---- - -## Overview - -This directory tracks records for all developers working with AI Agents on this project. - -### File Structure - -``` -workspace/ -|-- index.md # This file - main index -+-- {developer}/ # Per-developer directory - |-- index.md # Personal index with session history - |-- tasks/ # Task files - | |-- *.json # Active tasks - | +-- archive/ # Archived tasks by month - +-- journal-N.md # Journal files (sequential: 1, 2, 3...) -``` - ---- - -## Active Developers - -| Developer | Last Active | Sessions | Active File | -|-----------|-------------|----------|-------------| -| (none yet) | - | - | - | - ---- - -## Getting Started - -### For New Developers - -Run the initialization script: - -```bash -python3 ./.trellis/scripts/init_developer.py <your-name> -``` - -This will: -1. Create your identity file (gitignored) -2. Create your progress directory -3. Create your personal index -4. Create initial journal file - -### For Returning Developers - -1. Get your developer name: - ```bash - python3 ./.trellis/scripts/get_developer.py - ``` - -2. Read your personal index: - ```bash - cat .trellis/workspace/$(python3 ./.trellis/scripts/get_developer.py)/index.md - ``` - ---- - -## Guidelines - -### Journal File Rules - -- **Max 2000 lines** per journal file -- When limit is reached, create `journal-{N+1}.md` -- Update your personal `index.md` when creating new files - -### Session Record Format - -Each session should include: -- Summary: One-line description -- Branch: Which branch the work was done on -- Main Changes: What was modified -- Git Commits: Commit hashes and messages -- Next Steps: What to do next - ---- - -## Session Template - -Use this template when recording sessions: - -```markdown -## Session {N}: {Title} - -**Date**: YYYY-MM-DD -**Task**: {task-name} -**Branch**: `{branch-name}` - -### Summary - -{One-line summary} - -### Main Changes - -- {Change 1} -- {Change 2} - -### Git Commits - -| Hash | Message | -|------|---------| -| `abc1234` | {commit message} | - -### Testing - -- [OK] {Test result} - -### Status - -[OK] **Completed** / # **In Progress** / [P] **Blocked** - -### Next Steps - -- {Next step 1} -- {Next step 2} -``` - ---- - -**Language**: All documentation must be written in **English**. diff --git a/.trellis/worktree.yaml b/.trellis/worktree.yaml deleted file mode 100644 index 26485608..00000000 --- a/.trellis/worktree.yaml +++ /dev/null @@ -1,47 +0,0 @@ -# Worktree Configuration for Multi-Agent Pipeline -# Used for worktree initialization in multi-agent workflows -# -# All paths are relative to project root - -#------------------------------------------------------------------------------- -# Paths -#------------------------------------------------------------------------------- - -# Worktree storage directory (relative to project root) -worktree_dir: ../trellis-worktrees - -#------------------------------------------------------------------------------- -# Files to Copy -#------------------------------------------------------------------------------- - -# Files to copy to each worktree (each worktree needs independent copy) -# These files contain sensitive info or need worktree-independent config -copy: - # Environment variables (uncomment and customize as needed) - # - .env - # - .env.local - # Workflow config - - .trellis/.developer - -#------------------------------------------------------------------------------- -# Post-Create Hooks -#------------------------------------------------------------------------------- - -# Commands to run after creating worktree -# Executed in worktree directory, in order, abort on failure -post_create: - # Install dependencies (uncomment based on your package manager) - # - npm install - # - pnpm install --frozen-lockfile - # - yarn install --frozen-lockfile - -#------------------------------------------------------------------------------- -# Check Agent Verification (Ralph Loop) -#------------------------------------------------------------------------------- - -# Commands to verify code quality before allowing check agent to finish -# If configured, Ralph Loop will run these commands - all must pass to allow completion -# If not configured or empty, trusts agent's completion markers -verify: - # - pnpm lint - # - pnpm typecheck diff --git a/admin/src/api/patient.ts b/admin/src/api/patient.ts new file mode 100644 index 00000000..d26e8929 --- /dev/null +++ b/admin/src/api/patient.ts @@ -0,0 +1,27 @@ +import request from '@/utils/request' + +// 接诊台 - 待接诊队列(复用挂号列表接口) +// 建议调用方式:receptionQueue({ status: 1, start_date: today, end_date: today, page_size: 50 }) +export function receptionQueue(params: any) { + return request.get({ url: '/doctor.appointment/lists', params }) +} + +// 接诊台 - 聚合详情:挂号信息 + 诊单病例 + 血糖血压记录 +export function receptionDetail(params: { id: number }) { + return request.get({ url: '/doctor.appointment/reception', params }) +} + +// 接诊台 - 通知接诊医助(发企业微信) +export function notifyAssistant(params: { id: number }) { + return request.post({ url: '/doctor.appointment/notifyAssistant', params }) +} + +// 医生备注 - 添加/追加(同一天追加 content + tongue_images) +export function addDoctorNote(params: { diagnosis_id: number; content?: string; tongue_images?: string[] }) { + return request.post({ url: '/doctor.appointment/addDoctorNote', params }) +} + +// 医生备注 - 按诊单查询列表 +export function getDoctorNotes(params: { diagnosis_id: number }) { + return request.get({ url: '/doctor.appointment/doctorNotes', params }) +} diff --git a/admin/src/components/chat-dialog/index.vue b/admin/src/components/chat-dialog/index.vue index c94a18d5..0a5ac20e 100644 --- a/admin/src/components/chat-dialog/index.vue +++ b/admin/src/components/chat-dialog/index.vue @@ -129,6 +129,7 @@ import { ref, nextTick, watch, computed, onMounted, onUnmounted } from 'vue' import { Loading, Close, Rank, Camera, Fold, Expand } from '@element-plus/icons-vue' import { uploadImageBlob, uploadVideoBlob } from '@/api/file' +import { addDoctorNote } from '@/api/patient' import { attachLocalCallRecording, bindCallRoom, @@ -1327,6 +1328,9 @@ const handleCallKitScreenshot = async () => { } }) ) + try { + await addDoctorNote({ diagnosis_id: diagnosisId.value, tongue_images: [path] }) + } catch { /* 写入备注表失败不阻塞主流程 */ } } catch (e: unknown) { const err = e as Error console.error(err) diff --git a/admin/src/views/patient/reception/components/NoteTimeline.vue b/admin/src/views/patient/reception/components/NoteTimeline.vue new file mode 100644 index 00000000..df6a8935 --- /dev/null +++ b/admin/src/views/patient/reception/components/NoteTimeline.vue @@ -0,0 +1,116 @@ +<template> + <div v-if="notes.length" class="note-timeline"> + <div v-for="note in notes" :key="note.id" class="timeline-node"> + <div class="timeline-dot"></div> + <div class="timeline-date">{{ note.note_date }}</div> + <div class="timeline-body"> + <div v-if="note.content" class="timeline-content"> + <div v-for="(line, idx) in splitLines(note.content)" :key="idx" class="content-line"> + {{ line }} + </div> + </div> + <div v-if="note.tongue_images?.length" class="timeline-images"> + <el-image + v-for="(url, idx) in note.tongue_images" + :key="idx" + :src="url" + :preview-src-list="note.tongue_images" + :initial-index="idx" + fit="cover" + class="timeline-thumb" + preview-teleported + /> + </div> + </div> + </div> + </div> +</template> + +<script setup lang="ts"> +export interface DoctorNoteItem { + id: number + note_date: string + content: string | null + tongue_images: string[] +} + +defineProps<{ notes: DoctorNoteItem[] }>() + +const splitLines = (content: string | null): string[] => { + if (!content) return [] + return content.split('\n').filter(Boolean) +} +</script> + +<style scoped lang="scss"> +.note-timeline { + position: relative; + padding-left: 22px; +} +.note-timeline::before { + content: ''; + position: absolute; + left: 6px; + top: 4px; + bottom: 4px; + width: 2px; + background: #ebeef5; + border-radius: 1px; +} +.timeline-node { + position: relative; + padding-bottom: 16px; +} +.timeline-node:last-child { + padding-bottom: 0; +} +.timeline-dot { + position: absolute; + left: -19px; + top: 5px; + width: 10px; + height: 10px; + border-radius: 50%; + background: #409eff; + border: 2px solid #ecf5ff; +} +.timeline-date { + font-size: 13px; + font-weight: 600; + color: #303133; + margin-bottom: 6px; + font-family: 'IBM Plex Mono', Consolas, monospace; +} +.timeline-body { + display: flex; + flex-direction: column; + gap: 6px; +} +.timeline-content { + display: flex; + flex-direction: column; + gap: 2px; +} +.content-line { + font-size: 12.5px; + color: #606266; + line-height: 1.6; + word-break: break-word; +} +.timeline-images { + display: flex; + flex-wrap: wrap; + gap: 6px; +} +.timeline-thumb { + width: 64px; + height: 64px; + border-radius: 6px; + border: 1px solid #ebeef5; + cursor: pointer; + transition: transform 0.15s ease; +} +.timeline-thumb:hover { + transform: scale(1.05); +} +</style> diff --git a/admin/src/views/patient/reception/index.vue b/admin/src/views/patient/reception/index.vue new file mode 100644 index 00000000..0d4c7f9b --- /dev/null +++ b/admin/src/views/patient/reception/index.vue @@ -0,0 +1,1250 @@ +<template> + <div class="reception-page"> + <!-- 页头 --> + <div class="reception-header"> + <div class="header-left"> + <h1 class="header-title">接诊台</h1> + <!-- <div class="header-desc">显示今日待接诊与已过号患者,左侧选人,右侧处理。</div> --> + <div class="header-meta">{{ todayMeta }}</div> + </div> + <div class="header-right"> + <div class="live-pill"> + <span class="live-dot" :class="{ paused: pollPaused }"></span> + <span>{{ pollPaused ? '已暂停' : `${countdown}s 后刷新` }}</span> + </div> + </div> + </div> + + <!-- 筛选条 --> + <div class="filter-shell"> + <el-input + v-model="searchName" + placeholder="请输入患者姓名" + clearable + size="default" + class="search-input" + @keyup.enter="handleSearch" + @clear="handleSearch" + > + <template #prefix> + <el-icon><Search /></el-icon> + </template> + </el-input> + <div class="filter-tabs"> + <span + class="filter-tab" + :class="{ active: activeStatus === 1 }" + @click="switchStatus(1)" + >待接诊 {{ waitingTotal }} 人</span> + <span class="filter-sep">·</span> + <span + class="filter-tab" + :class="{ active: activeStatus === 4 }" + @click="switchStatus(4)" + >已过号 {{ passedTotal }} 人</span> + </div> + </div> + + <!-- 主体 --> + <div class="main-area"> + <!-- 左侧:待接诊队列 --> + <aside class="queue-col"> + <div class="queue-panel"> + <div class="queue-head"> + <span class="queue-title">{{ activeStatus === 1 ? '待接诊' : '已过号' }}</span> + <span class="queue-meta">{{ total }} 人</span> + </div> + <div ref="queueScrollRef" v-loading="queueLoading && queue.length === 0" class="queue-list"> + <div + v-for="row in queue" + :key="row.id" + class="queue-row" + :class="{ active: selectedId === row.id, passed: row.status === 4 }" + @click="selectRow(row)" + > + <div class="row-name"> + <div class="name-line"> + {{ row.patient_name || '未命名' }} + <span class="name-meta">{{ formatGenderAge(row) }}</span> + <el-tag v-if="row.status === 4" size="small" type="warning" class="ml-1">已过号</el-tag> + </div> + <div class="time-line"> + {{ row.appointment_time || '—' }} · 医助 {{ row.assistant_name || '—' }} + </div> + </div> + <div class="row-actions" @click.stop> + <el-tooltip content="通知医助(企业微信)" placement="top"> + <button + class="row-icon-btn notify" + :disabled="notifyingId === row.id" + @click="handleNotify(row)" + > + <el-icon v-if="notifyingId === row.id" class="is-loading"><Loading /></el-icon> + <el-icon v-else><ChatDotRound /></el-icon> + </button> + </el-tooltip> + <el-tooltip content="发起通话" placement="top"> + <button class="row-icon-btn call" @click="handleCall(row)"> + <el-icon><Phone /></el-icon> + </button> + </el-tooltip> + </div> + </div> + + <div v-if="queue.length > 0" ref="sentinelRef" class="scroll-sentinel"> + <span v-if="loadingMore">加载中…</span> + <span v-else-if="!hasMore" class="no-more">— 已全部加载 —</span> + </div> + + <el-empty v-if="!queueLoading && queue.length === 0" description="暂无待接诊患者" :image-size="64" /> + </div> + </div> + </aside> + + <!-- 右侧:患者信息 + 病例 + 血糖血压 --> + <section class="sidebar" v-loading="detailLoading && !detail"> + <template v-if="!selectedId"> + <div class="placeholder-card"> + <el-empty description="请从左侧选择一位待接诊患者" /> + </div> + </template> + + <template v-else-if="detail"> + <!-- 患者信息 --> + <div class="card patient-card"> + <div class="card-title">患者信息</div> + <div class="patient-hero"> + <div class="patient-name">{{ apt.patient_name || '—' }}</div> + <div class="patient-meta"> + <div>{{ maskPhone(apt.patient_phone) }} · {{ formatGender(diag.gender) }} · {{ diag.age != null ? diag.age + '岁' : '—' }}</div> + <div>{{ diag.height ? diag.height + 'cm' : '—' }} / {{ diag.weight ? diag.weight + 'kg' : '—' }} · {{ diag.region || '—' }}</div> + <div>预约:{{ apt.appointment_date }} {{ apt.appointment_time }} · {{ formatPeriod(apt.period) }}</div> + <div>医生:{{ apt.doctor_name || '—' }} 医助:{{ apt.assistant_name || '—' }}</div> + <div>状态:{{ apt.status_desc || '—' }} · {{ apt.has_prescription ? '已开方' : '未开方' }}</div> + <div v-if="apt.remark">备注:{{ apt.remark }}</div> + </div> + </div> + </div> + + <!-- 患者病例(完整、字段与 tcm/diagnosis/edit.vue 保持同步,只读展示) --> + <div class="card case-card"> + <div class="card-title"> + 患者病例 + <span class="case-sub">{{ caseTypeLabel }} · 诊断日期 {{ diag.diagnosis_date || apt.appointment_date || '—' }}</span> + </div> + + <!-- 基本信息 --> + <div class="grid-block"> + <div class="grid-title">基本信息</div> + <div class="kv-grid four"> + <KVItem label="诊单ID" :value="diag.patient_id" /> + <KVItem label="姓名" :value="diag.patient_name" /> + <KVItem label="身份证号" :value="diag.id_card" /> + <KVItem label="手机号" :value="maskPhone(diag.phone || apt.patient_phone)" /> + <KVItem label="性别" :value="textOf('gender')" /> + <KVItem label="年龄" :value="diag.age != null ? diag.age + '岁' : ''" /> + <KVItem label="婚姻状态" :value="textOf('marital_status')" /> + <KVItem label="地区" :value="diag.region" /> + </div> + </div> + + <!-- 生命体征 --> + <div class="grid-block"> + <div class="grid-title">生命体征</div> + <div class="kv-grid four"> + <KVItem label="身高" :value="diag.height ? diag.height + ' cm' : ''" /> + <KVItem label="体重" :value="diag.weight ? diag.weight + ' kg' : ''" /> + <KVItem label="高压" :value="diag.systolic_pressure ? diag.systolic_pressure + ' mmHg' : ''" /> + <KVItem label="低压" :value="diag.diastolic_pressure ? diag.diastolic_pressure + ' mmHg' : ''" /> + <KVItem label="空腹血糖" :value="diag.fasting_blood_sugar ? diag.fasting_blood_sugar + ' mmol/L' : ''" span="2" /> + <KVItem label="诊断类型" :value="textOf('diagnosis_type')" /> + <KVItem label="证型" :value="textOf('syndrome_type')" /> + <KVItem label="糖尿病期数" :value="textOf('diabetes_type')" /> + <KVItem label="在用药物" :value="diag.current_medications" span="3" multiline /> + </div> + </div> + + <!-- 主诉 --> + <div class="grid-block"> + <div class="grid-title">主诉</div> + <div class="kv-grid four"> + <KVItem label="当地医院诊断日期" :value="diag.diagnosis_date" /> + <KVItem label="发现糖尿病病史" :value="formatDiabetesDiscoveryDisplay ? formatDiabetesDiscoveryDisplay(diag.diabetes_discovery_year) : diag.diabetes_discovery_year" span="2" /> + <KVItem label="当地就诊医院" :value="diag.local_hospital_name" /> + <KVItem label="当地医院诊断结果" :value="joinArray(diag.local_hospital_diagnosis)" span="4" /> + </div> + </div> + + <!-- 现病史(后端已翻译 *_text) --> + <div class="grid-block"> + <div class="grid-title">现病史</div> + <div class="kv-grid three"> + <KVItem label="口腔感觉" :value="textOf('appetite')" /> + <KVItem label="每日饮水量" :value="textOf('water_intake')" /> + <KVItem label="近月体重变化" :value="textOf('weight_change')" /> + <KVItem label="脂肪肝程度" :value="textOf('fatty_liver_degree')" /> + <KVItem label="饮食情况" :value="textOf('diet_condition')" span="2" /> + <KVItem label="肢体感觉" :value="textOf('body_feeling')" /> + <KVItem label="睡眠情况" :value="textOf('sleep_condition')" /> + <KVItem label="眼睛情况" :value="textOf('eye_condition')" /> + <KVItem label="头部感觉" :value="textOf('head_feeling')" /> + <KVItem label="出汗情况" :value="textOf('sweat_condition')" /> + <KVItem label="皮肤情况" :value="textOf('skin_condition')" /> + <KVItem label="小便情况" :value="textOf('urine_condition')" /> + <KVItem label="大便情况" :value="textOf('stool_condition')" /> + <KVItem label="腰肾情况" :value="textOf('kidney_condition')" /> + <KVItem label="其他补充" :value="diag.symptoms" span="3" multiline /> + </div> + </div> + + <!-- 既往史 --> + <div class="grid-block"> + <div class="grid-title">既往史</div> + <div class="kv-grid three"> + <KVItem label="既往病史" :value="textOf('past_history')" span="3" /> + </div> + </div> + + <!-- 其他病史 --> + <div class="grid-block"> + <div class="grid-title">其他病史</div> + <div class="kv-grid three"> + <KVItem label="外伤史" :value="textOf('trauma_history')" /> + <KVItem label="手术史" :value="textOf('surgery_history')" /> + <KVItem label="过敏史" :value="textOf('allergy_history')" /> + <KVItem label="家族病史" :value="textOf('family_history')" /> + <KVItem label="妊娠哺乳史" :value="textOf('pregnancy_history')" /> + </div> + </div> + + <!-- 中医四诊与辨证 --> + <div class="grid-block"> + <div class="grid-title">中医四诊与辨证</div> + <div class="kv-grid two"> + <KVItem label="舌苔" :value="diag.tongue_coating" /> + <KVItem label="脉象" :value="diag.pulse" /> + <KVItem label="治则" :value="diag.treatment_principle" span="2" /> + </div> + </div> + + <!-- 病史补充 --> + <div class="grid-block" v-if="diag.remark"> + <div class="grid-title">病史补充</div> + <div class="kv-grid one"> + <KVItem label="" :value="diag.remark" multiline /> + </div> + </div> + + <!-- 处方意见 --> + <div class="grid-block"> + <div class="grid-title">处方意见</div> + <div class="rx-note"> + {{ apt.has_prescription ? '已开方。' : '当前未开方。' }} + </div> + </div> + </div> + + <!-- 医生备注 & 舌苔照片 --> + <div class="card note-card"> + <div class="card-title">医生备注 & 舌苔照片</div> + <NoteTimeline v-if="doctorNotes.length" :notes="doctorNotes" /> + <el-empty v-else description="暂无备注" :image-size="48" /> + </div> + + <!-- 血糖血压记录 --> + <div class="card metric-card"> + <div class="card-title">血糖血压记录</div> + <div class="metric-viewport"> + <el-table + :data="bloodRecords" + size="small" + stripe + empty-text="暂无血糖血压记录" + class="metric-table" + max-height="360" + > + <el-table-column prop="record_date" label="记录日期" width="110" /> + <el-table-column prop="record_time" label="记录时间" width="100"> + <template #default="{ row }">{{ row.record_time || '—' }}</template> + </el-table-column> + <el-table-column label="空腹血糖(mmol/L)" width="150"> + <template #default="{ row }">{{ row.fasting_blood_sugar ?? '—' }}</template> + </el-table-column> + <el-table-column label="餐后2小时血糖(mmol/L)" width="180"> + <template #default="{ row }">{{ row.postprandial_blood_sugar ?? '—' }}</template> + </el-table-column> + <el-table-column label="其他血糖(mmol/L)" width="150"> + <template #default="{ row }">{{ row.other_blood_sugar ?? '—' }}</template> + </el-table-column> + <el-table-column label="血压(mmHg)" width="130"> + <template #default="{ row }">{{ formatBp(row) }}</template> + </el-table-column> + <el-table-column label="西药" width="120"> + <template #default="{ row }">{{ row.western_medicine || '—' }}</template> + </el-table-column> + <el-table-column label="胰岛素" width="120"> + <template #default="{ row }">{{ row.insulin || '—' }}</template> + </el-table-column> + <el-table-column label="备注" min-width="160"> + <template #default="{ row }">{{ row.remark || '—' }}</template> + </el-table-column> + </el-table> + </div> + </div> + </template> + </section> + </div> + + <!-- 悬浮操作栏 --> + <transition name="fade"> + <div v-if="selectedId && detail" class="float-bar"> + <el-button + v-perms="['doctor.appointment/addDoctorNote']" + size="large" + @click="showNoteDialog = true" + > + 备注 + </el-button> + <el-button size="large" @click="handleEditDiagnosis"> + 编辑病历 + </el-button> + <el-button + v-if="apt.status === 1 || apt.status === 4" + v-perms="['doctor.appointment/complete']" + type="primary" + size="large" + :loading="finishLoading" + @click="handleFinish" + > + 完成接诊 + </el-button> + </div> + </transition> + + <!-- 备注弹窗 --> + <el-dialog v-model="showNoteDialog" title="添加备注" width="480px" append-to-body> + <el-input v-model="noteContent" type="textarea" :rows="4" placeholder="输入今日备注..." maxlength="500" show-word-limit /> + <template #footer> + <el-button @click="showNoteDialog = false">取消</el-button> + <el-button type="primary" :loading="noteSaving" @click="handleSaveNote">保存</el-button> + </template> + </el-dialog> + + <!-- 复用:通话弹窗 + 诊单编辑 --> + <component :is="ChatDialog" ref="chatDialogRef" /> + <component :is="DiagnosisEdit" ref="diagnosisEditRef" @success="onDiagnosisEditSuccess" /> + </div> +</template> + +<script setup lang="ts"> +import { defineAsyncComponent, onMounted, onUnmounted, h } from 'vue' +import { receptionQueue, receptionDetail, notifyAssistant, addDoctorNote } from '@/api/patient' +import NoteTimeline from './components/NoteTimeline.vue' +import { completeAppointment } from '@/api/doctor' +import { getCallSignature } from '@/api/tcm' +import feedback from '@/utils/feedback' +import { formatDiabetesDiscoveryDisplay } from '@/utils/diabetes-discovery-display' +import { + Phone, + Search, + ChatDotRound, + Loading +} from '@element-plus/icons-vue' + +const ChatDialog = defineAsyncComponent(() => import('@/components/chat-dialog/index.vue')) +const DiagnosisEdit = defineAsyncComponent(() => import('@/views/tcm/diagnosis/edit.vue')) + +/** + * 局部渲染组件:左侧 label + 右侧 value,支持 span / 换行 + */ +const KVItem = (props: { label: string; value: any; span?: string | number; multiline?: boolean }) => { + const val = props.value + const empty = val === undefined || val === null || val === '' || (Array.isArray(val) && val.length === 0) + return h( + 'div', + { + class: ['kv-item', props.multiline ? 'multiline' : '', empty ? 'empty' : ''], + style: props.span ? `grid-column: span ${props.span}` : '' + }, + [ + h('span', { class: 'kv-label' }, props.label), + h('span', { class: 'kv-value' }, empty ? '—' : String(val)) + ] + ) +} + +const POLL_MS = 5_000 +const PAGE_SIZE = 15 + +interface QueueRow { + id: number + patient_id: number + patient_name: string + patient_phone?: string + diagnosis_id?: number + doctor_id?: number + doctor_name?: string + assistant_id?: number + assistant_name?: string + appointment_date?: string + appointment_time?: string + gender?: number + age?: number | null + status?: number + status_desc?: string + has_prescription?: number + remark?: string +} + +const activeStatus = ref<1 | 4>(1) +const queue = ref<QueueRow[]>([]) +const total = ref(0) +const waitingTotal = ref(0) +const passedTotal = ref(0) +const page = ref(1) +const hasMore = ref(true) +const loadingMore = ref(false) +const queueLoading = ref(false) +const detailLoading = ref(false) +const selectedId = ref<number | null>(null) +const detail = ref<any>(null) +const finishLoading = ref(false) +const searchName = ref('') +const pollPaused = ref(false) +const countdown = ref(POLL_MS / 1000) +const notifyingId = ref<number | null>(null) +let pollTimer: ReturnType<typeof setInterval> | null = null +let countdownTimer: ReturnType<typeof setInterval> | null = null +/** 轮询请求未返回时的防重入标志,避免 5s 间隔下网络波动造成请求堆积 */ +let queueInflight = false +let detailInflight = false +let scrollObserver: IntersectionObserver | null = null + +const queueScrollRef = ref<HTMLElement | null>(null) +const sentinelRef = ref<HTMLElement | null>(null) +const chatDialogRef = ref() +const diagnosisEditRef = ref() +const showNoteDialog = ref(false) +const noteContent = ref('') +const noteSaving = ref(false) + +const apt = computed<any>(() => detail.value?.appointment || {}) +const diag = computed<any>(() => detail.value?.diagnosis || {}) +const bloodRecords = computed<any[]>(() => detail.value?.blood_records || []) +const doctorNotes = computed<any[]>(() => detail.value?.doctor_notes || []) + +const todayMeta = computed(() => { + const d = new Date() + const week = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'][d.getDay()] + const pad = (n: number) => String(n).padStart(2, '0') + return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${week}` +}) + + +const caseTypeLabel = computed(() => { + if (!diag.value) return '初诊' + return diag.value.consultation_type === 'follow_up' ? '复诊' : '初诊' +}) + +/** + * 诊单字典字段由后端 AppointmentLogic::enrichDiagnosisLabels 预翻译, + * 前端直接读 `<field>_text`;找不到时回退原值。 + */ +const textOf = (field: string): string => { + const d: any = diag.value || {} + const t = d[field + '_text'] + if (t !== undefined && t !== null && t !== '') return String(t) + const raw = d[field] + if (raw === undefined || raw === null || raw === '') return '' + return Array.isArray(raw) ? raw.join('、') : String(raw) +} + +const todayStr = () => { + const d = new Date() + const pad = (n: number) => String(n).padStart(2, '0') + return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}` +} + +const maskPhone = (phone?: string) => { + if (!phone) return '—' + if (phone.length < 11) return phone + return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2') +} + +const formatGender = (g?: number) => (g === 1 ? '男' : g === 0 ? '女' : '—') + +const formatGenderAge = (row: QueueRow) => { + const parts = [formatGender(row.gender), row.age != null ? row.age + '岁' : ''] + return parts.filter((p) => p && p !== '—').join(' ') +} + +const formatPeriod = (period?: string) => { + if (period === 'morning') return '上午' + if (period === 'afternoon') return '下午' + return '全天' +} + +const formatBp = (row: any) => { + const sys = row?.systolic_pressure + const dia = row?.diastolic_pressure + if (sys == null && dia == null) return '—' + return `${sys ?? '—'} / ${dia ?? '—'}` +} + +const joinArray = (arr: any): string => { + if (!arr) return '' + if (Array.isArray(arr)) return arr.filter(Boolean).join('、') + return String(arr) +} + +const fetchQueuePage = async (pageNo: number, status?: number) => { + const today = todayStr() + const res: any = await receptionQueue({ + status: status ?? activeStatus.value, + start_date: today, + end_date: today, + patient_name: searchName.value || undefined, + page_no: pageNo, + page_size: PAGE_SIZE + }) + const list: QueueRow[] = res?.lists || res?.data || [] + const count = Number(res?.count ?? res?.total ?? 0) + return { list, count } +} + +const fetchOtherCount = async () => { + const otherStatus = activeStatus.value === 1 ? 4 : 1 + try { + const { count } = await fetchQueuePage(1, otherStatus) + if (otherStatus === 1) waitingTotal.value = count + else passedTotal.value = count + } catch { /* 统计计数失败不阻塞 */ } +} + +const loadQueue = async (opts?: { silent?: boolean; keepSelection?: boolean }) => { + const silent = opts?.silent === true + if (silent && queueInflight) return + queueInflight = true + if (!silent) queueLoading.value = true + try { + page.value = 1 + const { list, count } = await fetchQueuePage(1) + queue.value = list + total.value = count || list.length + if (activeStatus.value === 1) waitingTotal.value = count + else passedTotal.value = count + hasMore.value = list.length >= PAGE_SIZE && queue.value.length < (count || 0) + + fetchOtherCount() + + if (selectedId.value && !list.some((r) => r.id === selectedId.value)) { + if (opts?.keepSelection === false) { + selectedId.value = null + detail.value = null + } + } + if (!selectedId.value && list.length > 0) { + await selectRow(list[0]) + } + } catch (e) { + if (!silent) console.error('加载队列失败:', e) + } finally { + queueLoading.value = false + queueInflight = false + } +} + +const loadMore = async () => { + if (loadingMore.value || !hasMore.value) return + loadingMore.value = true + try { + const nextPage = page.value + 1 + const { list, count } = await fetchQueuePage(nextPage) + // 去重合并(防止轮询时上方有新插入导致重复) + const existing = new Set(queue.value.map((r) => r.id)) + const appended = list.filter((r) => !existing.has(r.id)) + queue.value = [...queue.value, ...appended] + page.value = nextPage + total.value = count || total.value + hasMore.value = list.length >= PAGE_SIZE && queue.value.length < (count || 0) + } catch (e) { + console.error('加载更多失败:', e) + } finally { + loadingMore.value = false + } +} + +const refreshDetailSilently = async () => { + if (!selectedId.value || detailInflight) return + detailInflight = true + try { + const res: any = await receptionDetail({ id: selectedId.value }) + detail.value = res || detail.value + } catch (e) { + /* 静默失败 */ + } finally { + detailInflight = false + } +} + +const selectRow = async (row: QueueRow) => { + if (selectedId.value === row.id) return + selectedId.value = row.id + detail.value = null + detailLoading.value = true + detailInflight = true + resetCountdown() + try { + const res: any = await receptionDetail({ id: row.id }) + detail.value = res || null + } catch (e) { + console.error('加载详情失败:', e) + feedback.msgError('加载患者详情失败') + } finally { + detailLoading.value = false + detailInflight = false + } +} + +const switchStatus = async (status: 1 | 4) => { + if (activeStatus.value === status) return + activeStatus.value = status + selectedId.value = null + detail.value = null + await loadQueue() +} + +const handleSearch = async () => { + selectedId.value = null + detail.value = null + await loadQueue() +} + +const handleCall = async (row: QueueRow) => { + if (!row.patient_id) { + feedback.msgWarning('患者信息不完整') + return + } + try { + const res = await getCallSignature({ + patient_id: row.patient_id, + diagnosis_id: row.diagnosis_id || row.id + }) + chatDialogRef.value?.open({ + patientId: row.patient_id, + patientName: row.patient_name, + diagnosisId: row.diagnosis_id || row.id, + signatureData: res + }) + } catch (error: any) { + console.error('获取通话签名失败:', error) + feedback.msgError(error?.message || '获取通话签名失败') + } +} + +const handleNotify = async (row: QueueRow) => { + if (notifyingId.value) return + notifyingId.value = row.id + try { + await notifyAssistant({ id: row.id }) + feedback.msgSuccess(`已通知医助 ${row.assistant_name || ''}`) + } catch (e: any) { + feedback.msgError(e?.message || '通知失败') + } finally { + notifyingId.value = null + } +} + +const handleEditDiagnosis = () => { + if (!diag.value?.patient_id) return + diagnosisEditRef.value?.open('edit', diag.value.patient_id) +} + +const onDiagnosisEditSuccess = async () => { + await refreshDetailSilently() +} + +const handleFinish = async () => { + if (!apt.value?.id) return + try { + await feedback.confirm('确认将该患者标记为「已完成接诊」?此操作不可撤销。') + } catch { + return + } + finishLoading.value = true + try { + const removedId = apt.value.id + await completeAppointment({ id: removedId }) + feedback.msgSuccess('已完成接诊') + queue.value = queue.value.filter((r) => r.id !== removedId) + total.value = Math.max(0, total.value - 1) + if (activeStatus.value === 1) waitingTotal.value = Math.max(0, waitingTotal.value - 1) + else passedTotal.value = Math.max(0, passedTotal.value - 1) + selectedId.value = null + detail.value = null + resetCountdown() + if (queue.value.length > 0) { + await selectRow(queue.value[0]) + } else { + await loadQueue() + } + } catch (e: any) { + feedback.msgError(e?.message || '操作失败') + } finally { + finishLoading.value = false + } +} + +const handleSaveNote = async () => { + const diagId = diag.value?.id + if (!diagId) { + feedback.msgWarning('当前患者无诊单,无法添加备注') + return + } + const text = noteContent.value.trim() + if (!text) { + feedback.msgWarning('请输入备注内容') + return + } + noteSaving.value = true + try { + await addDoctorNote({ diagnosis_id: diagId, content: text }) + feedback.msgSuccess('备注保存成功') + noteContent.value = '' + showNoteDialog.value = false + await refreshDetailSilently() + } catch (e: any) { + feedback.msgError(e?.message || '保存失败') + } finally { + noteSaving.value = false + } +} + +const resetCountdown = () => { + countdown.value = POLL_MS / 1000 +} + +const startPolling = () => { + stopPolling() + resetCountdown() + // 1s 倒计时 + countdownTimer = setInterval(() => { + if (pollPaused.value) return + if (countdown.value > 1) { + countdown.value -= 1 + } else { + countdown.value = POLL_MS / 1000 + } + }, 1000) + // 5s 实际轮询 + pollTimer = setInterval(async () => { + if (pollPaused.value) return + await loadQueue({ silent: true, keepSelection: true }) + if (!detailLoading.value) { + await refreshDetailSilently() + } + }, POLL_MS) +} + +const stopPolling = () => { + if (pollTimer) { + clearInterval(pollTimer) + pollTimer = null + } + if (countdownTimer) { + clearInterval(countdownTimer) + countdownTimer = null + } +} + +const handleVisibilityChange = () => { + pollPaused.value = document.hidden + if (!document.hidden) { + resetCountdown() + loadQueue({ silent: true, keepSelection: true }) + refreshDetailSilently() + } +} + +/** + * 浏览器扩展(如钱包/翻译插件)注入的 content script 在页面卸载后投递消息, + * 常见报错 "Could not establish connection. Receiving end does not exist." + * 与本应用无关,静默吞掉避免污染控制台。 + */ +const onUnhandledRejection = (e: PromiseRejectionEvent) => { + const msg = String(e?.reason?.message || e?.reason || '') + if (/Receiving end does not exist|Could not establish connection/i.test(msg)) { + e.preventDefault() + } +} + +const setupScrollObserver = () => { + if (!sentinelRef.value || !queueScrollRef.value) return + scrollObserver?.disconnect() + scrollObserver = new IntersectionObserver( + (entries) => { + for (const entry of entries) { + if (entry.isIntersecting) loadMore() + } + }, + { root: queueScrollRef.value, rootMargin: '80px', threshold: 0 } + ) + scrollObserver.observe(sentinelRef.value) +} + +watch(sentinelRef, () => setupScrollObserver()) + +onMounted(() => { + loadQueue() + startPolling() + document.addEventListener('visibilitychange', handleVisibilityChange) + window.addEventListener('unhandledrejection', onUnhandledRejection) + nextTick(() => setupScrollObserver()) +}) + +onUnmounted(() => { + stopPolling() + scrollObserver?.disconnect() + document.removeEventListener('visibilitychange', handleVisibilityChange) + window.removeEventListener('unhandledrejection', onUnhandledRejection) +}) +</script> + +<style scoped lang="scss"> +.reception-page { + --rx-bg: #f5f7fa; + --rx-surface: #ffffff; + --rx-ink: #303133; + --rx-muted: #606266; + --rx-soft: #909399; + --rx-line: #ebeef5; + --rx-accent: #409eff; + --rx-accent-soft: #ecf5ff; + --rx-success: #67c23a; + --rx-font-data: 'IBM Plex Mono', Consolas, Menlo, monospace; + + min-height: calc(100vh - 80px); + padding: 16px 20px 28px; + background: var(--rx-bg); + display: flex; + flex-direction: column; + gap: 16px; +} + +/* 页头 */ +.reception-header { + display: flex; + justify-content: space-between; + align-items: flex-end; + gap: 16px; +} +.header-title { + margin: 0 0 4px; + font-size: 22px; + font-weight: 700; + color: var(--rx-ink); +} +.header-desc { + color: var(--rx-muted); + font-size: 13px; +} +.header-meta { + margin-top: 4px; + color: var(--rx-soft); + font-family: var(--rx-font-data); + font-size: 12px; +} +.header-right { + display: flex; + gap: 10px; + align-items: center; +} +.live-pill { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 6px 12px; + border-radius: 16px; + background: var(--rx-surface); + border: 1px solid var(--rx-line); + color: var(--rx-ink); + font-family: var(--rx-font-data); + font-size: 12px; + min-width: 112px; + justify-content: center; +} +.live-dot { + width: 8px; + height: 8px; + border-radius: 50%; + background: var(--rx-success); + animation: pulse 1.6s infinite; +} +.live-dot.paused { + background: var(--rx-soft); + animation: none; +} +@keyframes pulse { + 0% { box-shadow: 0 0 0 0 rgba(103, 194, 58, 0.5); } + 70% { box-shadow: 0 0 0 8px rgba(103, 194, 58, 0); } + 100% { box-shadow: 0 0 0 0 rgba(103, 194, 58, 0); } +} + +/* 筛选条 */ +.filter-shell { + background: var(--rx-surface); + border: 1px solid var(--rx-line); + border-radius: 12px; + padding: 10px 16px; + display: flex; + align-items: center; + gap: 16px; +} +.search-input { + width: 280px; +} +.filter-tabs { + margin-left: auto; + display: flex; + align-items: center; + gap: 6px; + font-size: 13px; +} +.filter-tab { + color: var(--rx-soft); + cursor: pointer; + padding: 4px 10px; + border-radius: 6px; + transition: all 0.15s ease; + user-select: none; +} +.filter-tab:hover { + color: var(--rx-accent); + background: var(--rx-accent-soft); +} +.filter-tab.active { + color: var(--rx-accent); + background: var(--rx-accent-soft); + font-weight: 600; +} +.filter-sep { + color: var(--rx-line); + font-size: 12px; +} + +/* 主体 */ +.main-area { + display: flex; + gap: 14px; + flex: 1; + min-height: 0; +} +.queue-col { + width: 288px; + flex-shrink: 0; +} +.queue-panel { + background: var(--rx-surface); + border: 1px solid var(--rx-line); + border-radius: 12px; + padding: 12px; + display: flex; + flex-direction: column; + gap: 10px; + height: calc(100vh - 260px); + min-height: 480px; +} +.queue-head { + display: flex; + justify-content: space-between; + align-items: center; +} +.queue-title { + font-size: 15px; + font-weight: 700; + color: var(--rx-ink); +} +.queue-meta { + color: var(--rx-muted); + font-family: var(--rx-font-data); + font-size: 12px; +} +.queue-list { + flex: 1; + overflow-y: auto; + display: flex; + flex-direction: column; + gap: 8px; + padding-right: 2px; +} +.queue-row { + border: 1px solid var(--rx-line); + border-radius: 8px; + padding: 10px; + display: flex; + justify-content: space-between; + align-items: center; + cursor: pointer; + transition: all 0.15s ease; + background: #fff; +} +.queue-row:hover { + border-color: var(--rx-accent); + background: var(--rx-accent-soft); +} +.queue-row.active { + background: var(--rx-accent-soft); + border-color: var(--rx-accent); + box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.12); +} +.queue-row.passed { + opacity: 0.7; +} +.row-name { + flex: 1; + min-width: 0; +} +.name-line { + font-size: 13px; + font-weight: 600; + color: var(--rx-ink); + display: flex; + align-items: baseline; + gap: 6px; +} +.name-meta { + font-size: 12px; + color: var(--rx-muted); + font-weight: 400; +} +.time-line { + margin-top: 2px; + font-size: 12px; + color: var(--rx-soft); + font-family: var(--rx-font-data); +} +.row-actions { + display: flex; + align-items: center; + gap: 6px; + flex-shrink: 0; +} +.row-icon-btn { + width: 30px; + height: 30px; + border-radius: 8px; + border: 1px solid transparent; + background: transparent; + color: var(--rx-muted); + display: inline-flex; + align-items: center; + justify-content: center; + cursor: pointer; + transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease, transform 0.15s ease; + font-size: 15px; + padding: 0; +} +.row-icon-btn:hover { + background: var(--rx-accent-soft); + color: var(--rx-accent); + border-color: var(--rx-accent); +} +.row-icon-btn:active { + transform: scale(0.92); +} +.row-icon-btn.notify:hover { + background: #fff7e6; + color: #e6a23c; + border-color: #e6a23c; +} +.row-icon-btn:disabled { + opacity: 0.6; + cursor: not-allowed; +} +.scroll-sentinel { + padding: 12px 0 4px; + text-align: center; + color: var(--rx-soft); + font-size: 12px; + font-family: var(--rx-font-data); +} +.scroll-sentinel .no-more { + color: #c0c4cc; +} + +/* 右侧 */ +.sidebar { + flex: 1; + display: flex; + flex-direction: column; + gap: 14px; + min-width: 0; + overflow-y: auto; + max-height: calc(100vh - 170px); + padding-right: 4px; +} +.placeholder-card { + flex: 1; + background: var(--rx-surface); + border: 1px solid var(--rx-line); + border-radius: 12px; + display: flex; + align-items: center; + justify-content: center; + min-height: 400px; +} +.card { + background: var(--rx-surface); + border: 1px solid var(--rx-line); + border-radius: 12px; + padding: 16px; + display: flex; + flex-direction: column; + gap: 12px; +} +.card-title { + font-size: 15px; + font-weight: 700; + color: var(--rx-ink); + display: flex; + align-items: baseline; + gap: 10px; +} +.case-sub { + font-size: 12px; + font-weight: 400; + color: var(--rx-soft); + font-family: var(--rx-font-data); +} +.patient-hero { + background: #f8fafc; + border: 1px solid var(--rx-line); + border-radius: 8px; + padding: 14px; + display: flex; + flex-direction: column; + gap: 6px; +} +.patient-name { + font-size: 22px; + font-weight: 700; + color: var(--rx-ink); +} +.patient-meta { + color: var(--rx-muted); + font-size: 13px; + line-height: 1.6; + display: flex; + flex-direction: column; + gap: 2px; +} + +/* 病例紧凑网格 */ +.grid-block { + display: flex; + flex-direction: column; + gap: 8px; + padding-top: 8px; + border-top: 1px dashed var(--rx-line); +} +.grid-block:first-of-type { + border-top: none; + padding-top: 0; +} +.grid-title { + font-size: 13px; + font-weight: 600; + color: var(--rx-ink); + letter-spacing: 0.02em; +} +.kv-grid { + display: grid; + gap: 6px 14px; +} +.kv-grid.one { grid-template-columns: 1fr; } +.kv-grid.two { grid-template-columns: repeat(2, 1fr); } +.kv-grid.three { grid-template-columns: repeat(3, 1fr); } +.kv-grid.four { grid-template-columns: repeat(4, 1fr); } + +:deep(.kv-item) { + display: flex; + gap: 6px; + font-size: 12.5px; + line-height: 1.55; + min-width: 0; +} +:deep(.kv-item.multiline) { + flex-direction: column; + gap: 2px; +} +:deep(.kv-item .kv-label) { + color: var(--rx-soft); + flex-shrink: 0; + min-width: 58px; +} +:deep(.kv-item .kv-value) { + color: var(--rx-ink); + word-break: break-word; + flex: 1; +} +:deep(.kv-item.empty .kv-value) { + color: #c0c4cc; +} +:deep(.kv-item.multiline .kv-value) { + white-space: pre-wrap; +} + +.rx-note { + font-size: 13px; + color: var(--rx-muted); + line-height: 1.6; + padding: 10px 12px; + background: #fafbfc; + border-radius: 6px; +} + +.metric-viewport { + border: 1px solid var(--rx-line); + border-radius: 8px; + overflow: hidden; +} +.metric-table :deep(.el-table__header) th { + background: #fafbfc; + color: var(--rx-ink); + font-weight: 600; +} + +.float-bar { + position: fixed; + right: 80px; + bottom: 15px; + z-index: 20; +} + +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.2s ease, transform 0.2s ease; +} +.fade-enter-from, +.fade-leave-to { + opacity: 0; + transform: translateY(8px); +} + +@media (max-width: 1100px) { + .main-area { + flex-direction: column; + } + .queue-col { + width: 100%; + } + .queue-panel { + height: auto; + max-height: 360px; + } + .kv-grid.three, + .kv-grid.four { + grid-template-columns: repeat(2, 1fr); + } +} +</style> diff --git a/admin/src/views/tcm/diagnosis/edit.vue b/admin/src/views/tcm/diagnosis/edit.vue index d1017985..a7b6aab3 100644 --- a/admin/src/views/tcm/diagnosis/edit.vue +++ b/admin/src/views/tcm/diagnosis/edit.vue @@ -662,6 +662,13 @@ /> <el-empty v-else description="请先保存诊单后再查看挂号记录" /> </el-tab-pane> + <el-tab-pane label="医生备注" name="doctorNote" :disabled="!formData.id" lazy> + <div v-if="formData.id" class="p-4"> + <NoteTimeline v-if="diagNotes.length" :notes="diagNotes" /> + <el-empty v-else description="暂无备注记录" :image-size="48" /> + </div> + <el-empty v-else description="请先保存诊单后查看" /> + </el-tab-pane> </el-tabs> <!-- 处方详情(查看病历) --> @@ -702,7 +709,9 @@ import CallRecordPanel from './components/CallRecordPanel.vue' import ImChatRecordPanel from './components/ImChatRecordPanel.vue' import AssignLogPanel from './components/AssignLogPanel.vue' import AppointmentRecordPanel from './components/AppointmentRecordPanel.vue' +import NoteTimeline from '@/views/patient/reception/components/NoteTimeline.vue' import TcmPrescription from '@/components/tcm-prescription/index.vue' +import { getDoctorNotes } from '@/api/patient' import { DIAGNOSIS_TONGUE_IMAGES_UPDATED, type DiagnosisTongueImagesUpdatedDetail @@ -733,6 +742,16 @@ const drawerTitle = computed(() => { return mode.value === 'add' ? '新增诊单' : '编辑诊单' }) +const diagNotes = ref<any[]>([]) + +watch(() => activeTab.value, async (tab) => { + if (tab === 'doctorNote' && formData.value.id) { + try { + diagNotes.value = await getDoctorNotes({ diagnosis_id: Number(formData.value.id) }) || [] + } catch { diagNotes.value = [] } + } +}) + watch([visible, activeTab], () => { if (!visible.value) return if (activeTab.value === 'chat' && !hasPermission(['tcm.diagnosis/chat'])) { diff --git a/admin/tsconfig.tsbuildinfo b/admin/tsconfig.tsbuildinfo index ba9c68e2..439ee9f2 100644 --- a/admin/tsconfig.tsbuildinfo +++ b/admin/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/typescript/lib/lib.es2024.d.ts","./node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.dom.asynciterable.d.ts","./node_modules/typescript/lib/lib.webworker.importscripts.d.ts","./node_modules/typescript/lib/lib.scripthost.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/typescript/lib/lib.es2023.intl.d.ts","./node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2024.collection.d.ts","./node_modules/typescript/lib/lib.es2024.object.d.ts","./node_modules/typescript/lib/lib.es2024.promise.d.ts","./node_modules/typescript/lib/lib.es2024.regexp.d.ts","./node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2024.string.d.ts","./node_modules/typescript/lib/lib.esnext.array.d.ts","./node_modules/typescript/lib/lib.esnext.collection.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.promise.d.ts","./node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/typescript/lib/lib.esnext.iterator.d.ts","./node_modules/typescript/lib/lib.esnext.float16.d.ts","./node_modules/typescript/lib/lib.esnext.error.d.ts","./node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/typescript/lib/lib.esnext.full.d.ts","./node_modules/vite/types/hmrpayload.d.ts","./node_modules/vite/types/customevent.d.ts","./node_modules/vite/types/hot.d.ts","./node_modules/vite/types/importglob.d.ts","./node_modules/vite/types/importmeta.d.ts","./node_modules/vite/client.d.ts","./global.d.ts","./node_modules/@vue/shared/dist/shared.d.ts","./node_modules/@babel/types/lib/index.d.ts","./node_modules/@babel/parser/typings/babel-parser.d.ts","./node_modules/@vue/compiler-core/dist/compiler-core.d.ts","./node_modules/@vue/compiler-dom/dist/compiler-dom.d.ts","./node_modules/@vue/reactivity/dist/reactivity.d.ts","./node_modules/@vue/runtime-core/dist/runtime-core.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@vue/runtime-dom/dist/runtime-dom.d.ts","./node_modules/vue/dist/vue.d.mts","./node_modules/vue/jsx-runtime/index.d.ts","./node_modules/.vue-global-types/vue_3.5_0_0_0.d.ts","./node_modules/vue-router/dist/router-cwonjprp.d.mts","./node_modules/vue-router/dist/vue-router.d.mts","./node_modules/@vueuse/shared/index.d.mts","./node_modules/@vueuse/core/index.d.mts","./node_modules/element-plus/es/locale/lang/zh-cn.d.ts","./src/enums/appenums.ts","./node_modules/vue-demi/lib/index.d.ts","./node_modules/pinia/dist/pinia.d.ts","./node_modules/axios/index.d.ts","./node_modules/@types/lodash/common/common.d.ts","./node_modules/@types/lodash/common/array.d.ts","./node_modules/@types/lodash/common/collection.d.ts","./node_modules/@types/lodash/common/date.d.ts","./node_modules/@types/lodash/common/function.d.ts","./node_modules/@types/lodash/common/lang.d.ts","./node_modules/@types/lodash/common/math.d.ts","./node_modules/@types/lodash/common/number.d.ts","./node_modules/@types/lodash/common/object.d.ts","./node_modules/@types/lodash/common/seq.d.ts","./node_modules/@types/lodash/common/string.d.ts","./node_modules/@types/lodash/common/util.d.ts","./node_modules/@types/lodash/index.d.ts","./src/config/index.ts","./src/enums/pageenum.ts","./src/enums/requestenums.ts","./src/api/user.ts","./src/enums/cacheenums.ts","./src/utils/validate.ts","./src/stores/modules/multipletabs.ts","./src/utils/cache.ts","./src/utils/auth.ts","./src/stores/modules/user.ts","./src/config/setting.ts","./src/utils/theme.ts","./src/stores/modules/setting.ts","./src/layout/default/components/setting/drawer.vue","./src/layout/default/components/setting/index.vue","./src/hooks/usewatchroute.ts","./src/layout/default/components/header/breadcrumb.vue","./src/layout/default/components/header/fold.vue","./src/layout/default/components/header/full-screen.vue","./src/hooks/usemultipletabs.ts","./src/layout/default/components/header/multiple-tabs.vue","./src/layout/default/components/header/refresh.vue","./src/api/setting/system.ts","./node_modules/element-plus/es/utils/dom/aria.d.ts","./node_modules/element-plus/es/utils/dom/event.d.ts","./node_modules/element-plus/es/utils/dom/position.d.ts","./node_modules/element-plus/es/utils/dom/scroll.d.ts","./node_modules/element-plus/es/utils/dom/style.d.ts","./node_modules/element-plus/es/utils/dom/element.d.ts","./node_modules/element-plus/es/utils/dom/index.d.ts","./node_modules/element-plus/es/utils/vue/global-node.d.ts","./node_modules/element-plus/es/utils/vue/icon.d.ts","./node_modules/element-plus/es/utils/vue/typescript.d.ts","./node_modules/element-plus/es/utils/vue/install.d.ts","./node_modules/element-plus/es/utils/vue/props/util.d.ts","./node_modules/element-plus/es/utils/vue/props/runtime.d.ts","./node_modules/element-plus/es/utils/vue/props/types.d.ts","./node_modules/element-plus/es/utils/vue/props/index.d.ts","./node_modules/element-plus/es/utils/vue/refs.d.ts","./node_modules/element-plus/es/constants/aria.d.ts","./node_modules/element-plus/es/constants/date.d.ts","./node_modules/element-plus/es/constants/event.d.ts","./node_modules/element-plus/es/constants/key.d.ts","./node_modules/element-plus/es/constants/size.d.ts","./node_modules/element-plus/es/constants/column-alignment.d.ts","./node_modules/element-plus/es/constants/form.d.ts","./node_modules/element-plus/es/constants/index.d.ts","./node_modules/element-plus/es/utils/vue/size.d.ts","./node_modules/element-plus/es/utils/vue/validator.d.ts","./node_modules/element-plus/es/utils/vue/vnode.d.ts","./node_modules/element-plus/es/utils/vue/index.d.ts","./node_modules/@types/lodash-es/add.d.ts","./node_modules/@types/lodash-es/after.d.ts","./node_modules/@types/lodash-es/ary.d.ts","./node_modules/@types/lodash-es/assign.d.ts","./node_modules/@types/lodash-es/assignin.d.ts","./node_modules/@types/lodash-es/assigninwith.d.ts","./node_modules/@types/lodash-es/assignwith.d.ts","./node_modules/@types/lodash-es/at.d.ts","./node_modules/@types/lodash-es/attempt.d.ts","./node_modules/@types/lodash-es/before.d.ts","./node_modules/@types/lodash-es/bind.d.ts","./node_modules/@types/lodash-es/bindall.d.ts","./node_modules/@types/lodash-es/bindkey.d.ts","./node_modules/@types/lodash-es/camelcase.d.ts","./node_modules/@types/lodash-es/capitalize.d.ts","./node_modules/@types/lodash-es/castarray.d.ts","./node_modules/@types/lodash-es/ceil.d.ts","./node_modules/@types/lodash-es/chain.d.ts","./node_modules/@types/lodash-es/chunk.d.ts","./node_modules/@types/lodash-es/clamp.d.ts","./node_modules/@types/lodash-es/clone.d.ts","./node_modules/@types/lodash-es/clonedeep.d.ts","./node_modules/@types/lodash-es/clonedeepwith.d.ts","./node_modules/@types/lodash-es/clonewith.d.ts","./node_modules/@types/lodash-es/compact.d.ts","./node_modules/@types/lodash-es/concat.d.ts","./node_modules/@types/lodash-es/cond.d.ts","./node_modules/@types/lodash-es/conforms.d.ts","./node_modules/@types/lodash-es/conformsto.d.ts","./node_modules/@types/lodash-es/constant.d.ts","./node_modules/@types/lodash-es/countby.d.ts","./node_modules/@types/lodash-es/create.d.ts","./node_modules/@types/lodash-es/curry.d.ts","./node_modules/@types/lodash-es/curryright.d.ts","./node_modules/@types/lodash-es/debounce.d.ts","./node_modules/@types/lodash-es/deburr.d.ts","./node_modules/@types/lodash-es/defaults.d.ts","./node_modules/@types/lodash-es/defaultsdeep.d.ts","./node_modules/@types/lodash-es/defaultto.d.ts","./node_modules/@types/lodash-es/defer.d.ts","./node_modules/@types/lodash-es/delay.d.ts","./node_modules/@types/lodash-es/difference.d.ts","./node_modules/@types/lodash-es/differenceby.d.ts","./node_modules/@types/lodash-es/differencewith.d.ts","./node_modules/@types/lodash-es/divide.d.ts","./node_modules/@types/lodash-es/drop.d.ts","./node_modules/@types/lodash-es/dropright.d.ts","./node_modules/@types/lodash-es/droprightwhile.d.ts","./node_modules/@types/lodash-es/dropwhile.d.ts","./node_modules/@types/lodash-es/each.d.ts","./node_modules/@types/lodash-es/eachright.d.ts","./node_modules/@types/lodash-es/endswith.d.ts","./node_modules/@types/lodash-es/entries.d.ts","./node_modules/@types/lodash-es/entriesin.d.ts","./node_modules/@types/lodash-es/eq.d.ts","./node_modules/@types/lodash-es/escape.d.ts","./node_modules/@types/lodash-es/escaperegexp.d.ts","./node_modules/@types/lodash-es/every.d.ts","./node_modules/@types/lodash-es/extend.d.ts","./node_modules/@types/lodash-es/extendwith.d.ts","./node_modules/@types/lodash-es/fill.d.ts","./node_modules/@types/lodash-es/filter.d.ts","./node_modules/@types/lodash-es/find.d.ts","./node_modules/@types/lodash-es/findindex.d.ts","./node_modules/@types/lodash-es/findkey.d.ts","./node_modules/@types/lodash-es/findlast.d.ts","./node_modules/@types/lodash-es/findlastindex.d.ts","./node_modules/@types/lodash-es/findlastkey.d.ts","./node_modules/@types/lodash-es/first.d.ts","./node_modules/@types/lodash-es/flatmap.d.ts","./node_modules/@types/lodash-es/flatmapdeep.d.ts","./node_modules/@types/lodash-es/flatmapdepth.d.ts","./node_modules/@types/lodash-es/flatten.d.ts","./node_modules/@types/lodash-es/flattendeep.d.ts","./node_modules/@types/lodash-es/flattendepth.d.ts","./node_modules/@types/lodash-es/flip.d.ts","./node_modules/@types/lodash-es/floor.d.ts","./node_modules/@types/lodash-es/flow.d.ts","./node_modules/@types/lodash-es/flowright.d.ts","./node_modules/@types/lodash-es/foreach.d.ts","./node_modules/@types/lodash-es/foreachright.d.ts","./node_modules/@types/lodash-es/forin.d.ts","./node_modules/@types/lodash-es/forinright.d.ts","./node_modules/@types/lodash-es/forown.d.ts","./node_modules/@types/lodash-es/forownright.d.ts","./node_modules/@types/lodash-es/frompairs.d.ts","./node_modules/@types/lodash-es/functions.d.ts","./node_modules/@types/lodash-es/functionsin.d.ts","./node_modules/@types/lodash-es/get.d.ts","./node_modules/@types/lodash-es/groupby.d.ts","./node_modules/@types/lodash-es/gt.d.ts","./node_modules/@types/lodash-es/gte.d.ts","./node_modules/@types/lodash-es/has.d.ts","./node_modules/@types/lodash-es/hasin.d.ts","./node_modules/@types/lodash-es/head.d.ts","./node_modules/@types/lodash-es/identity.d.ts","./node_modules/@types/lodash-es/includes.d.ts","./node_modules/@types/lodash-es/indexof.d.ts","./node_modules/@types/lodash-es/initial.d.ts","./node_modules/@types/lodash-es/inrange.d.ts","./node_modules/@types/lodash-es/intersection.d.ts","./node_modules/@types/lodash-es/intersectionby.d.ts","./node_modules/@types/lodash-es/intersectionwith.d.ts","./node_modules/@types/lodash-es/invert.d.ts","./node_modules/@types/lodash-es/invertby.d.ts","./node_modules/@types/lodash-es/invoke.d.ts","./node_modules/@types/lodash-es/invokemap.d.ts","./node_modules/@types/lodash-es/isarguments.d.ts","./node_modules/@types/lodash-es/isarray.d.ts","./node_modules/@types/lodash-es/isarraybuffer.d.ts","./node_modules/@types/lodash-es/isarraylike.d.ts","./node_modules/@types/lodash-es/isarraylikeobject.d.ts","./node_modules/@types/lodash-es/isboolean.d.ts","./node_modules/@types/lodash-es/isbuffer.d.ts","./node_modules/@types/lodash-es/isdate.d.ts","./node_modules/@types/lodash-es/iselement.d.ts","./node_modules/@types/lodash-es/isempty.d.ts","./node_modules/@types/lodash-es/isequal.d.ts","./node_modules/@types/lodash-es/isequalwith.d.ts","./node_modules/@types/lodash-es/iserror.d.ts","./node_modules/@types/lodash-es/isfinite.d.ts","./node_modules/@types/lodash-es/isfunction.d.ts","./node_modules/@types/lodash-es/isinteger.d.ts","./node_modules/@types/lodash-es/islength.d.ts","./node_modules/@types/lodash-es/ismap.d.ts","./node_modules/@types/lodash-es/ismatch.d.ts","./node_modules/@types/lodash-es/ismatchwith.d.ts","./node_modules/@types/lodash-es/isnan.d.ts","./node_modules/@types/lodash-es/isnative.d.ts","./node_modules/@types/lodash-es/isnil.d.ts","./node_modules/@types/lodash-es/isnull.d.ts","./node_modules/@types/lodash-es/isnumber.d.ts","./node_modules/@types/lodash-es/isobject.d.ts","./node_modules/@types/lodash-es/isobjectlike.d.ts","./node_modules/@types/lodash-es/isplainobject.d.ts","./node_modules/@types/lodash-es/isregexp.d.ts","./node_modules/@types/lodash-es/issafeinteger.d.ts","./node_modules/@types/lodash-es/isset.d.ts","./node_modules/@types/lodash-es/isstring.d.ts","./node_modules/@types/lodash-es/issymbol.d.ts","./node_modules/@types/lodash-es/istypedarray.d.ts","./node_modules/@types/lodash-es/isundefined.d.ts","./node_modules/@types/lodash-es/isweakmap.d.ts","./node_modules/@types/lodash-es/isweakset.d.ts","./node_modules/@types/lodash-es/iteratee.d.ts","./node_modules/@types/lodash-es/join.d.ts","./node_modules/@types/lodash-es/kebabcase.d.ts","./node_modules/@types/lodash-es/keyby.d.ts","./node_modules/@types/lodash-es/keys.d.ts","./node_modules/@types/lodash-es/keysin.d.ts","./node_modules/@types/lodash-es/last.d.ts","./node_modules/@types/lodash-es/lastindexof.d.ts","./node_modules/@types/lodash-es/lowercase.d.ts","./node_modules/@types/lodash-es/lowerfirst.d.ts","./node_modules/@types/lodash-es/lt.d.ts","./node_modules/@types/lodash-es/lte.d.ts","./node_modules/@types/lodash-es/map.d.ts","./node_modules/@types/lodash-es/mapkeys.d.ts","./node_modules/@types/lodash-es/mapvalues.d.ts","./node_modules/@types/lodash-es/matches.d.ts","./node_modules/@types/lodash-es/matchesproperty.d.ts","./node_modules/@types/lodash-es/max.d.ts","./node_modules/@types/lodash-es/maxby.d.ts","./node_modules/@types/lodash-es/mean.d.ts","./node_modules/@types/lodash-es/meanby.d.ts","./node_modules/@types/lodash-es/memoize.d.ts","./node_modules/@types/lodash-es/merge.d.ts","./node_modules/@types/lodash-es/mergewith.d.ts","./node_modules/@types/lodash-es/method.d.ts","./node_modules/@types/lodash-es/methodof.d.ts","./node_modules/@types/lodash-es/min.d.ts","./node_modules/@types/lodash-es/minby.d.ts","./node_modules/@types/lodash-es/mixin.d.ts","./node_modules/@types/lodash-es/multiply.d.ts","./node_modules/@types/lodash-es/negate.d.ts","./node_modules/@types/lodash-es/noop.d.ts","./node_modules/@types/lodash-es/now.d.ts","./node_modules/@types/lodash-es/nth.d.ts","./node_modules/@types/lodash-es/ntharg.d.ts","./node_modules/@types/lodash-es/omit.d.ts","./node_modules/@types/lodash-es/omitby.d.ts","./node_modules/@types/lodash-es/once.d.ts","./node_modules/@types/lodash-es/orderby.d.ts","./node_modules/@types/lodash-es/over.d.ts","./node_modules/@types/lodash-es/overargs.d.ts","./node_modules/@types/lodash-es/overevery.d.ts","./node_modules/@types/lodash-es/oversome.d.ts","./node_modules/@types/lodash-es/pad.d.ts","./node_modules/@types/lodash-es/padend.d.ts","./node_modules/@types/lodash-es/padstart.d.ts","./node_modules/@types/lodash-es/parseint.d.ts","./node_modules/@types/lodash-es/partial.d.ts","./node_modules/@types/lodash-es/partialright.d.ts","./node_modules/@types/lodash-es/partition.d.ts","./node_modules/@types/lodash-es/pick.d.ts","./node_modules/@types/lodash-es/pickby.d.ts","./node_modules/@types/lodash-es/property.d.ts","./node_modules/@types/lodash-es/propertyof.d.ts","./node_modules/@types/lodash-es/pull.d.ts","./node_modules/@types/lodash-es/pullall.d.ts","./node_modules/@types/lodash-es/pullallby.d.ts","./node_modules/@types/lodash-es/pullallwith.d.ts","./node_modules/@types/lodash-es/pullat.d.ts","./node_modules/@types/lodash-es/random.d.ts","./node_modules/@types/lodash-es/range.d.ts","./node_modules/@types/lodash-es/rangeright.d.ts","./node_modules/@types/lodash-es/rearg.d.ts","./node_modules/@types/lodash-es/reduce.d.ts","./node_modules/@types/lodash-es/reduceright.d.ts","./node_modules/@types/lodash-es/reject.d.ts","./node_modules/@types/lodash-es/remove.d.ts","./node_modules/@types/lodash-es/repeat.d.ts","./node_modules/@types/lodash-es/replace.d.ts","./node_modules/@types/lodash-es/rest.d.ts","./node_modules/@types/lodash-es/result.d.ts","./node_modules/@types/lodash-es/reverse.d.ts","./node_modules/@types/lodash-es/round.d.ts","./node_modules/@types/lodash-es/sample.d.ts","./node_modules/@types/lodash-es/samplesize.d.ts","./node_modules/@types/lodash-es/set.d.ts","./node_modules/@types/lodash-es/setwith.d.ts","./node_modules/@types/lodash-es/shuffle.d.ts","./node_modules/@types/lodash-es/size.d.ts","./node_modules/@types/lodash-es/slice.d.ts","./node_modules/@types/lodash-es/snakecase.d.ts","./node_modules/@types/lodash-es/some.d.ts","./node_modules/@types/lodash-es/sortby.d.ts","./node_modules/@types/lodash-es/sortedindex.d.ts","./node_modules/@types/lodash-es/sortedindexby.d.ts","./node_modules/@types/lodash-es/sortedindexof.d.ts","./node_modules/@types/lodash-es/sortedlastindex.d.ts","./node_modules/@types/lodash-es/sortedlastindexby.d.ts","./node_modules/@types/lodash-es/sortedlastindexof.d.ts","./node_modules/@types/lodash-es/sorteduniq.d.ts","./node_modules/@types/lodash-es/sorteduniqby.d.ts","./node_modules/@types/lodash-es/split.d.ts","./node_modules/@types/lodash-es/spread.d.ts","./node_modules/@types/lodash-es/startcase.d.ts","./node_modules/@types/lodash-es/startswith.d.ts","./node_modules/@types/lodash-es/stubarray.d.ts","./node_modules/@types/lodash-es/stubfalse.d.ts","./node_modules/@types/lodash-es/stubobject.d.ts","./node_modules/@types/lodash-es/stubstring.d.ts","./node_modules/@types/lodash-es/stubtrue.d.ts","./node_modules/@types/lodash-es/subtract.d.ts","./node_modules/@types/lodash-es/sum.d.ts","./node_modules/@types/lodash-es/sumby.d.ts","./node_modules/@types/lodash-es/tail.d.ts","./node_modules/@types/lodash-es/take.d.ts","./node_modules/@types/lodash-es/takeright.d.ts","./node_modules/@types/lodash-es/takerightwhile.d.ts","./node_modules/@types/lodash-es/takewhile.d.ts","./node_modules/@types/lodash-es/tap.d.ts","./node_modules/@types/lodash-es/template.d.ts","./node_modules/@types/lodash-es/templatesettings.d.ts","./node_modules/@types/lodash-es/throttle.d.ts","./node_modules/@types/lodash-es/thru.d.ts","./node_modules/@types/lodash-es/times.d.ts","./node_modules/@types/lodash-es/toarray.d.ts","./node_modules/@types/lodash-es/tofinite.d.ts","./node_modules/@types/lodash-es/tointeger.d.ts","./node_modules/@types/lodash-es/tolength.d.ts","./node_modules/@types/lodash-es/tolower.d.ts","./node_modules/@types/lodash-es/tonumber.d.ts","./node_modules/@types/lodash-es/topairs.d.ts","./node_modules/@types/lodash-es/topairsin.d.ts","./node_modules/@types/lodash-es/topath.d.ts","./node_modules/@types/lodash-es/toplainobject.d.ts","./node_modules/@types/lodash-es/tosafeinteger.d.ts","./node_modules/@types/lodash-es/tostring.d.ts","./node_modules/@types/lodash-es/toupper.d.ts","./node_modules/@types/lodash-es/transform.d.ts","./node_modules/@types/lodash-es/trim.d.ts","./node_modules/@types/lodash-es/trimend.d.ts","./node_modules/@types/lodash-es/trimstart.d.ts","./node_modules/@types/lodash-es/truncate.d.ts","./node_modules/@types/lodash-es/unary.d.ts","./node_modules/@types/lodash-es/unescape.d.ts","./node_modules/@types/lodash-es/union.d.ts","./node_modules/@types/lodash-es/unionby.d.ts","./node_modules/@types/lodash-es/unionwith.d.ts","./node_modules/@types/lodash-es/uniq.d.ts","./node_modules/@types/lodash-es/uniqby.d.ts","./node_modules/@types/lodash-es/uniqueid.d.ts","./node_modules/@types/lodash-es/uniqwith.d.ts","./node_modules/@types/lodash-es/unset.d.ts","./node_modules/@types/lodash-es/unzip.d.ts","./node_modules/@types/lodash-es/unzipwith.d.ts","./node_modules/@types/lodash-es/update.d.ts","./node_modules/@types/lodash-es/updatewith.d.ts","./node_modules/@types/lodash-es/uppercase.d.ts","./node_modules/@types/lodash-es/upperfirst.d.ts","./node_modules/@types/lodash-es/values.d.ts","./node_modules/@types/lodash-es/valuesin.d.ts","./node_modules/@types/lodash-es/without.d.ts","./node_modules/@types/lodash-es/words.d.ts","./node_modules/@types/lodash-es/wrap.d.ts","./node_modules/@types/lodash-es/xor.d.ts","./node_modules/@types/lodash-es/xorby.d.ts","./node_modules/@types/lodash-es/xorwith.d.ts","./node_modules/@types/lodash-es/zip.d.ts","./node_modules/@types/lodash-es/zipobject.d.ts","./node_modules/@types/lodash-es/zipobjectdeep.d.ts","./node_modules/@types/lodash-es/zipwith.d.ts","./node_modules/@types/lodash-es/index.d.ts","./node_modules/lodash-unified/type.d.ts","./node_modules/element-plus/es/utils/arrays.d.ts","./node_modules/element-plus/node_modules/@vueuse/shared/index.d.mts","./node_modules/element-plus/node_modules/@vueuse/core/index.d.mts","./node_modules/element-plus/es/utils/browser.d.ts","./node_modules/element-plus/es/utils/error.d.ts","./node_modules/element-plus/es/utils/functions.d.ts","./node_modules/element-plus/es/utils/i18n.d.ts","./node_modules/element-plus/es/utils/objects.d.ts","./node_modules/element-plus/es/utils/raf.d.ts","./node_modules/element-plus/es/utils/rand.d.ts","./node_modules/element-plus/es/utils/strings.d.ts","./node_modules/element-plus/es/utils/types.d.ts","./node_modules/element-plus/es/utils/typescript.d.ts","./node_modules/element-plus/es/utils/throttlebyraf.d.ts","./node_modules/element-plus/es/utils/easings.d.ts","./node_modules/element-plus/es/utils/index.d.ts","./node_modules/element-plus/es/components/affix/src/affix.d.ts","./node_modules/element-plus/es/components/affix/src/affix.vue.d.ts","./node_modules/element-plus/es/components/affix/index.d.ts","./node_modules/element-plus/es/components/alert/src/alert.d.ts","./node_modules/element-plus/es/components/alert/src/alert.vue.d.ts","./node_modules/element-plus/es/components/alert/src/instance.d.ts","./node_modules/element-plus/es/components/alert/index.d.ts","./node_modules/@popperjs/core/lib/enums.d.ts","./node_modules/@popperjs/core/lib/modifiers/popperoffsets.d.ts","./node_modules/@popperjs/core/lib/modifiers/flip.d.ts","./node_modules/@popperjs/core/lib/modifiers/hide.d.ts","./node_modules/@popperjs/core/lib/modifiers/offset.d.ts","./node_modules/@popperjs/core/lib/modifiers/eventlisteners.d.ts","./node_modules/@popperjs/core/lib/modifiers/computestyles.d.ts","./node_modules/@popperjs/core/lib/modifiers/arrow.d.ts","./node_modules/@popperjs/core/lib/modifiers/preventoverflow.d.ts","./node_modules/@popperjs/core/lib/modifiers/applystyles.d.ts","./node_modules/@popperjs/core/lib/types.d.ts","./node_modules/@popperjs/core/lib/modifiers/index.d.ts","./node_modules/@popperjs/core/lib/utils/detectoverflow.d.ts","./node_modules/@popperjs/core/lib/createpopper.d.ts","./node_modules/@popperjs/core/lib/popper-lite.d.ts","./node_modules/@popperjs/core/lib/popper.d.ts","./node_modules/@popperjs/core/lib/index.d.ts","./node_modules/@popperjs/core/index.d.ts","./node_modules/element-plus/es/components/popper/src/constants.d.ts","./node_modules/element-plus/es/components/popper/src/popper.d.ts","./node_modules/element-plus/es/components/popper/src/popper.vue.d.ts","./node_modules/element-plus/es/components/popper/src/arrow.vue.d.ts","./node_modules/element-plus/es/components/popper/src/trigger.d.ts","./node_modules/element-plus/es/components/popper/src/trigger.vue.d.ts","./node_modules/element-plus/es/components/popper/src/arrow.d.ts","./node_modules/element-plus/es/components/popper/src/content.d.ts","./node_modules/element-plus/es/components/popper/src/content.vue.d.ts","./node_modules/element-plus/es/components/popper/index.d.ts","./node_modules/element-plus/es/components/input/src/input.d.ts","./node_modules/element-plus/es/components/input/src/input.vue.d.ts","./node_modules/element-plus/es/components/input/src/instance.d.ts","./node_modules/element-plus/es/components/input/index.d.ts","./node_modules/element-plus/es/hooks/use-attrs/index.d.ts","./node_modules/element-plus/es/hooks/use-calc-input-width/index.d.ts","./node_modules/element-plus/es/hooks/use-deprecated/index.d.ts","./node_modules/element-plus/es/hooks/use-draggable/index.d.ts","./node_modules/element-plus/es/hooks/use-focus/index.d.ts","./node_modules/element-plus/es/locale/lang/en.d.ts","./node_modules/element-plus/es/locale/lang/af.d.ts","./node_modules/element-plus/es/locale/lang/ar-eg.d.ts","./node_modules/element-plus/es/locale/lang/ar.d.ts","./node_modules/element-plus/es/locale/lang/az.d.ts","./node_modules/element-plus/es/locale/lang/bg.d.ts","./node_modules/element-plus/es/locale/lang/bn.d.ts","./node_modules/element-plus/es/locale/lang/ca.d.ts","./node_modules/element-plus/es/locale/lang/ckb.d.ts","./node_modules/element-plus/es/locale/lang/cs.d.ts","./node_modules/element-plus/es/locale/lang/da.d.ts","./node_modules/element-plus/es/locale/lang/de.d.ts","./node_modules/element-plus/es/locale/lang/el.d.ts","./node_modules/element-plus/es/locale/lang/eo.d.ts","./node_modules/element-plus/es/locale/lang/es.d.ts","./node_modules/element-plus/es/locale/lang/et.d.ts","./node_modules/element-plus/es/locale/lang/eu.d.ts","./node_modules/element-plus/es/locale/lang/fa.d.ts","./node_modules/element-plus/es/locale/lang/fi.d.ts","./node_modules/element-plus/es/locale/lang/fr.d.ts","./node_modules/element-plus/es/locale/lang/he.d.ts","./node_modules/element-plus/es/locale/lang/hi.d.ts","./node_modules/element-plus/es/locale/lang/hr.d.ts","./node_modules/element-plus/es/locale/lang/hu.d.ts","./node_modules/element-plus/es/locale/lang/hy-am.d.ts","./node_modules/element-plus/es/locale/lang/id.d.ts","./node_modules/element-plus/es/locale/lang/it.d.ts","./node_modules/element-plus/es/locale/lang/ja.d.ts","./node_modules/element-plus/es/locale/lang/kk.d.ts","./node_modules/element-plus/es/locale/lang/km.d.ts","./node_modules/element-plus/es/locale/lang/ko.d.ts","./node_modules/element-plus/es/locale/lang/ku.d.ts","./node_modules/element-plus/es/locale/lang/ky.d.ts","./node_modules/element-plus/es/locale/lang/lo.d.ts","./node_modules/element-plus/es/locale/lang/lt.d.ts","./node_modules/element-plus/es/locale/lang/lv.d.ts","./node_modules/element-plus/es/locale/lang/mg.d.ts","./node_modules/element-plus/es/locale/lang/mn.d.ts","./node_modules/element-plus/es/locale/lang/ms.d.ts","./node_modules/element-plus/es/locale/lang/my.d.ts","./node_modules/element-plus/es/locale/lang/nb-no.d.ts","./node_modules/element-plus/es/locale/lang/nl.d.ts","./node_modules/element-plus/es/locale/lang/no.d.ts","./node_modules/element-plus/es/locale/lang/pa.d.ts","./node_modules/element-plus/es/locale/lang/pl.d.ts","./node_modules/element-plus/es/locale/lang/pt-br.d.ts","./node_modules/element-plus/es/locale/lang/pt.d.ts","./node_modules/element-plus/es/locale/lang/ro.d.ts","./node_modules/element-plus/es/locale/lang/ru.d.ts","./node_modules/element-plus/es/locale/lang/sk.d.ts","./node_modules/element-plus/es/locale/lang/sl.d.ts","./node_modules/element-plus/es/locale/lang/sr.d.ts","./node_modules/element-plus/es/locale/lang/sv.d.ts","./node_modules/element-plus/es/locale/lang/sw.d.ts","./node_modules/element-plus/es/locale/lang/ta.d.ts","./node_modules/element-plus/es/locale/lang/te.d.ts","./node_modules/element-plus/es/locale/lang/th.d.ts","./node_modules/element-plus/es/locale/lang/tk.d.ts","./node_modules/element-plus/es/locale/lang/tr.d.ts","./node_modules/element-plus/es/locale/lang/ug-cn.d.ts","./node_modules/element-plus/es/locale/lang/uk.d.ts","./node_modules/element-plus/es/locale/lang/uz-uz.d.ts","./node_modules/element-plus/es/locale/lang/vi.d.ts","./node_modules/element-plus/es/locale/lang/zh-tw.d.ts","./node_modules/element-plus/es/locale/lang/zh-hk.d.ts","./node_modules/element-plus/es/locale/lang/zh-mo.d.ts","./node_modules/element-plus/es/locale/index.d.ts","./node_modules/element-plus/es/hooks/use-locale/index.d.ts","./node_modules/element-plus/es/hooks/use-namespace/index.d.ts","./node_modules/element-plus/es/hooks/use-lockscreen/index.d.ts","./node_modules/element-plus/es/hooks/use-modal/index.d.ts","./node_modules/element-plus/es/hooks/use-model-toggle/index.d.ts","./node_modules/element-plus/es/hooks/use-prevent-global/index.d.ts","./node_modules/element-plus/es/hooks/use-prop/index.d.ts","./node_modules/element-plus/es/hooks/use-popper/index.d.ts","./node_modules/element-plus/es/hooks/use-same-target/index.d.ts","./node_modules/element-plus/es/hooks/use-teleport/index.d.ts","./node_modules/element-plus/es/hooks/use-throttle-render/index.d.ts","./node_modules/element-plus/es/hooks/use-timeout/index.d.ts","./node_modules/element-plus/es/hooks/use-transition-fallthrough/index.d.ts","./node_modules/element-plus/es/hooks/use-id/index.d.ts","./node_modules/element-plus/es/hooks/use-escape-keydown/index.d.ts","./node_modules/element-plus/es/hooks/use-popper-container/index.d.ts","./node_modules/element-plus/es/hooks/use-intermediate-render/index.d.ts","./node_modules/element-plus/es/hooks/use-delayed-toggle/index.d.ts","./node_modules/element-plus/es/hooks/use-forward-ref/index.d.ts","./node_modules/element-plus/es/hooks/use-z-index/index.d.ts","./node_modules/@floating-ui/utils/dist/floating-ui.utils.d.mts","./node_modules/@floating-ui/core/dist/floating-ui.core.d.mts","./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.d.mts","./node_modules/@floating-ui/dom/dist/floating-ui.dom.d.mts","./node_modules/element-plus/es/hooks/use-floating/index.d.ts","./node_modules/element-plus/es/hooks/use-cursor/index.d.ts","./node_modules/element-plus/es/hooks/use-ordered-children/index.d.ts","./node_modules/element-plus/es/hooks/use-size/index.d.ts","./node_modules/element-plus/es/hooks/use-focus-controller/index.d.ts","./node_modules/element-plus/es/hooks/use-composition/index.d.ts","./node_modules/element-plus/es/hooks/use-empty-values/index.d.ts","./node_modules/element-plus/es/hooks/use-aria/index.d.ts","./node_modules/element-plus/es/hooks/index.d.ts","./node_modules/element-plus/es/components/tooltip/src/content.vue.d.ts","./node_modules/element-plus/es/components/tooltip/src/content.d.ts","./node_modules/element-plus/es/components/tooltip/src/trigger.d.ts","./node_modules/element-plus/es/components/tooltip/src/tooltip.d.ts","./node_modules/element-plus/es/components/tooltip/src/tooltip.vue.d.ts","./node_modules/element-plus/es/components/tooltip/src/constants.d.ts","./node_modules/element-plus/es/components/tooltip/index.d.ts","./node_modules/element-plus/es/components/autocomplete/src/autocomplete.d.ts","./node_modules/element-plus/es/components/autocomplete/src/autocomplete.vue.d.ts","./node_modules/element-plus/es/components/autocomplete/index.d.ts","./node_modules/element-plus/es/components/avatar/src/avatar.d.ts","./node_modules/element-plus/es/components/avatar/src/avatar.vue.d.ts","./node_modules/element-plus/es/components/avatar/src/avatar-group.d.ts","./node_modules/element-plus/es/components/avatar/src/constants.d.ts","./node_modules/element-plus/es/components/avatar/src/avatar-group-props.d.ts","./node_modules/element-plus/es/components/avatar/src/instance.d.ts","./node_modules/element-plus/es/components/avatar/index.d.ts","./node_modules/element-plus/es/components/backtop/src/backtop.d.ts","./node_modules/element-plus/es/components/backtop/src/backtop.vue.d.ts","./node_modules/element-plus/es/components/backtop/src/instance.d.ts","./node_modules/element-plus/es/components/backtop/index.d.ts","./node_modules/element-plus/es/components/badge/src/badge.d.ts","./node_modules/element-plus/es/components/badge/src/badge.vue.d.ts","./node_modules/element-plus/es/components/badge/src/instance.d.ts","./node_modules/element-plus/es/components/badge/index.d.ts","./node_modules/element-plus/es/components/breadcrumb/src/breadcrumb.d.ts","./node_modules/element-plus/es/components/breadcrumb/src/breadcrumb.vue.d.ts","./node_modules/element-plus/es/components/breadcrumb/src/breadcrumb-item.d.ts","./node_modules/element-plus/es/components/breadcrumb/src/breadcrumb-item.vue.d.ts","./node_modules/element-plus/es/components/breadcrumb/src/constants.d.ts","./node_modules/element-plus/es/components/breadcrumb/src/instances.d.ts","./node_modules/element-plus/es/components/breadcrumb/index.d.ts","./node_modules/element-plus/es/components/button/src/button.d.ts","./node_modules/element-plus/es/components/button/src/button.vue.d.ts","./node_modules/element-plus/es/components/button/src/button-group.d.ts","./node_modules/element-plus/es/components/button/src/button-group.vue.d.ts","./node_modules/element-plus/es/components/button/src/constants.d.ts","./node_modules/element-plus/es/components/button/src/instance.d.ts","./node_modules/element-plus/es/components/button/index.d.ts","./node_modules/element-plus/es/components/calendar/src/calendar.d.ts","./node_modules/dayjs/locale/types.d.ts","./node_modules/dayjs/locale/index.d.ts","./node_modules/dayjs/index.d.ts","./node_modules/element-plus/es/components/calendar/src/calendar.vue.d.ts","./node_modules/element-plus/es/components/calendar/src/date-table.d.ts","./node_modules/element-plus/es/components/calendar/src/date-table.vue.d.ts","./node_modules/element-plus/es/components/calendar/src/instance.d.ts","./node_modules/element-plus/es/components/calendar/index.d.ts","./node_modules/element-plus/es/components/card/src/card.d.ts","./node_modules/element-plus/es/components/card/src/card.vue.d.ts","./node_modules/element-plus/es/components/card/src/instance.d.ts","./node_modules/element-plus/es/components/card/index.d.ts","./node_modules/element-plus/es/components/carousel/src/carousel.d.ts","./node_modules/element-plus/es/components/carousel/src/carousel.vue.d.ts","./node_modules/element-plus/es/components/carousel/src/carousel-item.d.ts","./node_modules/element-plus/es/components/carousel/src/carousel-item.vue.d.ts","./node_modules/element-plus/es/components/carousel/src/constants.d.ts","./node_modules/element-plus/es/components/carousel/src/instance.d.ts","./node_modules/element-plus/es/components/carousel/index.d.ts","./node_modules/element-plus/es/components/cascader-panel/src/types.d.ts","./node_modules/element-plus/es/components/cascader-panel/src/node.d.ts","./node_modules/element-plus/es/components/cascader-panel/src/menu.vue.d.ts","./node_modules/element-plus/es/components/cascader-panel/src/instance.d.ts","./node_modules/element-plus/es/components/cascader-panel/src/config.d.ts","./node_modules/element-plus/es/components/cascader-panel/src/index.vue.d.ts","./node_modules/element-plus/es/components/cascader-panel/index.d.ts","./node_modules/element-plus/es/components/tag/src/tag.d.ts","./node_modules/element-plus/es/components/tag/src/tag.vue.d.ts","./node_modules/element-plus/es/components/tag/index.d.ts","./node_modules/element-plus/es/components/cascader/src/cascader.d.ts","./node_modules/element-plus/es/components/cascader/src/cascader.vue.d.ts","./node_modules/element-plus/es/components/cascader/src/instances.d.ts","./node_modules/element-plus/es/components/cascader/index.d.ts","./node_modules/element-plus/es/components/check-tag/src/check-tag.d.ts","./node_modules/element-plus/es/components/check-tag/src/check-tag.vue.d.ts","./node_modules/element-plus/es/components/check-tag/index.d.ts","./node_modules/element-plus/es/components/checkbox/src/checkbox.d.ts","./node_modules/element-plus/es/components/checkbox/src/checkbox.vue.d.ts","./node_modules/element-plus/es/components/checkbox/src/checkbox-button.vue.d.ts","./node_modules/element-plus/es/components/checkbox/src/checkbox-group.d.ts","./node_modules/element-plus/es/components/checkbox/src/checkbox-group.vue.d.ts","./node_modules/element-plus/es/components/checkbox/src/constants.d.ts","./node_modules/element-plus/es/components/checkbox/index.d.ts","./node_modules/element-plus/es/components/col/src/col.d.ts","./node_modules/element-plus/es/components/col/src/col.vue.d.ts","./node_modules/element-plus/es/components/col/index.d.ts","./node_modules/element-plus/es/components/collapse/src/collapse.d.ts","./node_modules/element-plus/es/components/collapse/src/collapse.vue.d.ts","./node_modules/element-plus/es/components/collapse/src/collapse-item.d.ts","./node_modules/element-plus/es/components/collapse/src/collapse-item.vue.d.ts","./node_modules/element-plus/es/components/collapse/src/constants.d.ts","./node_modules/element-plus/es/components/collapse/src/instance.d.ts","./node_modules/element-plus/es/components/collapse/index.d.ts","./node_modules/element-plus/es/components/collapse-transition/src/collapse-transition.vue.d.ts","./node_modules/element-plus/es/components/collapse-transition/index.d.ts","./node_modules/@ctrl/tinycolor/dist/interfaces.d.ts","./node_modules/@ctrl/tinycolor/dist/index.d.ts","./node_modules/@ctrl/tinycolor/dist/css-color-names.d.ts","./node_modules/@ctrl/tinycolor/dist/readability.d.ts","./node_modules/@ctrl/tinycolor/dist/to-ms-filter.d.ts","./node_modules/@ctrl/tinycolor/dist/from-ratio.d.ts","./node_modules/@ctrl/tinycolor/dist/format-input.d.ts","./node_modules/@ctrl/tinycolor/dist/random.d.ts","./node_modules/@ctrl/tinycolor/dist/conversion.d.ts","./node_modules/@ctrl/tinycolor/dist/public_api.d.ts","./node_modules/element-plus/es/components/color-picker-panel/src/utils/color.d.ts","./node_modules/element-plus/es/components/color-picker-panel/src/color-picker-panel.d.ts","./node_modules/element-plus/es/components/color-picker-panel/src/color-picker-panel.vue.d.ts","./node_modules/element-plus/es/components/color-picker-panel/index.d.ts","./node_modules/element-plus/es/components/color-picker/src/color-picker.d.ts","./node_modules/element-plus/es/components/color-picker/src/color-picker.vue.d.ts","./node_modules/element-plus/es/components/color-picker/index.d.ts","./node_modules/element-plus/es/components/message/src/message.vue.d.ts","./node_modules/element-plus/es/components/message/src/message.d.ts","./node_modules/element-plus/es/components/message/index.d.ts","./node_modules/element-plus/es/components/dialog/src/dialog-content.d.ts","./node_modules/element-plus/es/components/dialog/src/dialog.d.ts","./node_modules/element-plus/es/components/dialog/src/dialog.vue.d.ts","./node_modules/element-plus/es/components/dialog/src/use-dialog.d.ts","./node_modules/element-plus/es/components/dialog/src/constants.d.ts","./node_modules/element-plus/es/components/dialog/index.d.ts","./node_modules/element-plus/es/components/link/src/link.d.ts","./node_modules/element-plus/es/components/link/src/link.vue.d.ts","./node_modules/element-plus/es/components/link/index.d.ts","./node_modules/element-plus/es/components/table/src/store/tree.d.ts","./node_modules/element-plus/es/components/table/src/store/index.d.ts","./node_modules/element-plus/es/components/table/src/util.d.ts","./node_modules/element-plus/es/components/table/src/table/defaults.d.ts","./node_modules/element-plus/es/components/table/src/table-column/defaults.d.ts","./node_modules/element-plus/es/components/table/src/table-header/index.d.ts","./node_modules/element-plus/es/components/table/src/table-layout.d.ts","./node_modules/element-plus/es/components/table/src/table.vue.d.ts","./node_modules/element-plus/es/components/table/src/table-column/index.d.ts","./node_modules/element-plus/es/components/table/src/tablecolumn.d.ts","./node_modules/element-plus/es/components/table/index.d.ts","./node_modules/element-plus/es/components/config-provider/src/config-provider-props.d.ts","./node_modules/element-plus/es/components/config-provider/src/config-provider.d.ts","./node_modules/element-plus/es/components/config-provider/src/constants.d.ts","./node_modules/element-plus/es/components/config-provider/src/hooks/use-global-config.d.ts","./node_modules/element-plus/es/components/config-provider/index.d.ts","./node_modules/element-plus/es/components/container/src/container.vue.d.ts","./node_modules/element-plus/es/components/container/src/aside.vue.d.ts","./node_modules/element-plus/es/components/container/src/footer.vue.d.ts","./node_modules/element-plus/es/components/container/src/header.vue.d.ts","./node_modules/element-plus/es/components/container/src/main.vue.d.ts","./node_modules/element-plus/es/components/container/index.d.ts","./node_modules/element-plus/es/components/countdown/src/countdown.d.ts","./node_modules/element-plus/es/components/countdown/src/countdown.vue.d.ts","./node_modules/element-plus/es/components/countdown/index.d.ts","./node_modules/element-plus/es/components/time-picker/src/common/props.d.ts","./node_modules/element-plus/es/components/time-picker/src/time-picker.d.ts","./node_modules/element-plus/es/components/time-picker/src/common/picker.vue.d.ts","./node_modules/element-plus/es/components/time-picker/src/time-picker-com/panel-time-pick.vue.d.ts","./node_modules/element-plus/es/components/time-picker/src/utils.d.ts","./node_modules/element-plus/es/components/time-picker/src/composables/use-common-picker.d.ts","./node_modules/element-plus/es/components/time-picker/src/constants.d.ts","./node_modules/element-plus/es/components/time-picker/index.d.ts","./node_modules/element-plus/es/components/date-picker-panel/src/date-picker-panel.d.ts","./node_modules/element-plus/es/components/date-picker-panel/src/constants.d.ts","./node_modules/element-plus/es/components/date-picker-panel/src/types.d.ts","./node_modules/element-plus/es/components/date-picker-panel/src/props/date-picker-panel.d.ts","./node_modules/element-plus/es/components/date-picker-panel/src/instance.d.ts","./node_modules/element-plus/es/components/date-picker-panel/index.d.ts","./node_modules/element-plus/es/components/date-picker/src/date-picker.d.ts","./node_modules/element-plus/es/components/date-picker/src/props.d.ts","./node_modules/element-plus/es/components/date-picker/src/instance.d.ts","./node_modules/element-plus/es/components/date-picker/index.d.ts","./node_modules/element-plus/es/components/descriptions/src/description.d.ts","./node_modules/element-plus/es/components/descriptions/src/description.vue.d.ts","./node_modules/element-plus/es/components/descriptions/src/description-item.d.ts","./node_modules/element-plus/es/components/descriptions/index.d.ts","./node_modules/element-plus/es/components/divider/src/divider.d.ts","./node_modules/element-plus/es/components/divider/src/divider.vue.d.ts","./node_modules/element-plus/es/components/divider/index.d.ts","./node_modules/element-plus/es/components/drawer/src/drawer.d.ts","./node_modules/element-plus/es/components/drawer/src/drawer.vue.d.ts","./node_modules/element-plus/es/components/drawer/index.d.ts","./node_modules/element-plus/es/components/dropdown/src/dropdown.vue.d.ts","./node_modules/element-plus/es/components/dropdown/src/dropdown-item.vue.d.ts","./node_modules/element-plus/es/components/dropdown/src/dropdown-menu.vue.d.ts","./node_modules/element-plus/es/components/dropdown/src/dropdown.d.ts","./node_modules/element-plus/es/components/dropdown/src/instance.d.ts","./node_modules/element-plus/es/components/dropdown/src/tokens.d.ts","./node_modules/element-plus/es/components/dropdown/index.d.ts","./node_modules/element-plus/es/components/empty/src/empty.d.ts","./node_modules/element-plus/es/components/empty/src/empty.vue.d.ts","./node_modules/element-plus/es/components/empty/src/instance.d.ts","./node_modules/element-plus/es/components/empty/index.d.ts","./node_modules/async-validator/dist-types/interface.d.ts","./node_modules/async-validator/dist-types/index.d.ts","./node_modules/element-plus/es/components/form/src/utils.d.ts","./node_modules/element-plus/es/components/form/src/types.d.ts","./node_modules/element-plus/es/components/form/src/form-item.d.ts","./node_modules/element-plus/es/components/form/src/form.d.ts","./node_modules/element-plus/es/components/form/src/form.vue.d.ts","./node_modules/element-plus/es/components/form/src/form-item.vue.d.ts","./node_modules/element-plus/es/components/form/src/constants.d.ts","./node_modules/element-plus/es/components/form/src/hooks/use-form-common-props.d.ts","./node_modules/element-plus/es/components/form/src/hooks/use-form-item.d.ts","./node_modules/element-plus/es/components/form/src/hooks/index.d.ts","./node_modules/element-plus/es/components/form/index.d.ts","./node_modules/element-plus/es/components/icon/src/icon.d.ts","./node_modules/element-plus/es/components/icon/src/icon.vue.d.ts","./node_modules/element-plus/es/components/icon/index.d.ts","./node_modules/element-plus/es/components/image/src/image.d.ts","./node_modules/element-plus/es/components/image-viewer/src/image-viewer.d.ts","./node_modules/element-plus/es/components/image-viewer/src/image-viewer.vue.d.ts","./node_modules/element-plus/es/components/image-viewer/index.d.ts","./node_modules/element-plus/es/components/image/src/image.vue.d.ts","./node_modules/element-plus/es/components/image/index.d.ts","./node_modules/element-plus/es/components/input-number/src/input-number.d.ts","./node_modules/element-plus/es/components/input-number/src/input-number.vue.d.ts","./node_modules/element-plus/es/components/input-number/index.d.ts","./node_modules/element-plus/es/components/input-tag/src/input-tag.d.ts","./node_modules/element-plus/es/components/input-tag/src/input-tag.vue.d.ts","./node_modules/element-plus/es/components/input-tag/src/instance.d.ts","./node_modules/element-plus/es/components/input-tag/index.d.ts","./node_modules/element-plus/es/components/menu/src/types.d.ts","./node_modules/element-plus/es/components/menu/src/menu.d.ts","./node_modules/element-plus/es/components/menu/src/menu-item.d.ts","./node_modules/element-plus/es/components/menu/src/menu-item.vue.d.ts","./node_modules/element-plus/es/components/menu/src/menu-item-group.vue.d.ts","./node_modules/element-plus/es/components/menu/src/sub-menu.d.ts","./node_modules/element-plus/es/components/menu/src/menu-item-group.d.ts","./node_modules/element-plus/es/components/menu/src/instance.d.ts","./node_modules/element-plus/es/components/menu/src/tokens.d.ts","./node_modules/element-plus/es/components/menu/index.d.ts","./node_modules/element-plus/es/components/overlay/src/overlay.d.ts","./node_modules/element-plus/es/components/overlay/index.d.ts","./node_modules/element-plus/es/components/page-header/src/page-header.d.ts","./node_modules/element-plus/es/components/page-header/src/page-header.vue.d.ts","./node_modules/element-plus/es/components/page-header/index.d.ts","./node_modules/element-plus/es/components/pagination/src/pagination.d.ts","./node_modules/element-plus/es/components/pagination/src/constants.d.ts","./node_modules/element-plus/es/components/pagination/index.d.ts","./node_modules/element-plus/es/components/popconfirm/src/popconfirm.d.ts","./node_modules/element-plus/es/components/popconfirm/src/popconfirm.vue.d.ts","./node_modules/element-plus/es/components/popconfirm/index.d.ts","./node_modules/element-plus/es/components/progress/src/progress.d.ts","./node_modules/element-plus/es/components/progress/src/progress.vue.d.ts","./node_modules/element-plus/es/components/progress/index.d.ts","./node_modules/element-plus/es/components/radio/src/radio.d.ts","./node_modules/element-plus/es/components/radio/src/radio.vue.d.ts","./node_modules/element-plus/es/components/radio/src/radio-button.d.ts","./node_modules/element-plus/es/components/radio/src/radio-button.vue.d.ts","./node_modules/element-plus/es/components/radio/src/radio-group.d.ts","./node_modules/element-plus/es/components/radio/src/radio-group.vue.d.ts","./node_modules/element-plus/es/components/radio/src/constants.d.ts","./node_modules/element-plus/es/components/radio/index.d.ts","./node_modules/element-plus/es/components/rate/src/rate.d.ts","./node_modules/element-plus/es/components/rate/src/rate.vue.d.ts","./node_modules/element-plus/es/components/rate/index.d.ts","./node_modules/element-plus/es/components/result/src/result.d.ts","./node_modules/element-plus/es/components/result/src/result.vue.d.ts","./node_modules/element-plus/es/components/result/index.d.ts","./node_modules/element-plus/es/components/row/src/row.d.ts","./node_modules/element-plus/es/components/row/src/row.vue.d.ts","./node_modules/element-plus/es/components/row/src/constants.d.ts","./node_modules/element-plus/es/components/row/index.d.ts","./node_modules/element-plus/es/components/scrollbar/src/scrollbar.d.ts","./node_modules/element-plus/es/components/scrollbar/src/scrollbar.vue.d.ts","./node_modules/element-plus/es/components/scrollbar/src/thumb.vue.d.ts","./node_modules/element-plus/es/components/scrollbar/src/thumb.d.ts","./node_modules/element-plus/es/components/scrollbar/src/util.d.ts","./node_modules/element-plus/es/components/scrollbar/src/constants.d.ts","./node_modules/element-plus/es/components/scrollbar/index.d.ts","./node_modules/element-plus/es/components/select-v2/src/select.types.d.ts","./node_modules/element-plus/es/components/virtual-list/src/components/fixed-size-list.d.ts","./node_modules/element-plus/es/components/virtual-list/src/defaults.d.ts","./node_modules/element-plus/es/components/virtual-list/src/types.d.ts","./node_modules/element-plus/es/components/virtual-list/src/components/dynamic-size-list.d.ts","./node_modules/element-plus/es/components/virtual-list/src/components/fixed-size-grid.d.ts","./node_modules/memoize-one/dist/memoize-one.d.ts","./node_modules/element-plus/es/components/virtual-list/src/hooks/use-cache.d.ts","./node_modules/element-plus/es/components/virtual-list/src/props.d.ts","./node_modules/element-plus/es/components/virtual-list/src/builders/build-grid.d.ts","./node_modules/element-plus/es/components/virtual-list/src/components/dynamic-size-grid.d.ts","./node_modules/element-plus/es/components/virtual-list/index.d.ts","./node_modules/element-plus/es/components/select-v2/src/select-dropdown.d.ts","./node_modules/element-plus/es/components/select-v2/src/select.vue.d.ts","./node_modules/element-plus/es/components/select-v2/src/defaults.d.ts","./node_modules/element-plus/es/components/select-v2/src/token.d.ts","./node_modules/element-plus/es/components/select-v2/src/useprops.d.ts","./node_modules/element-plus/es/components/select/src/select.d.ts","./node_modules/element-plus/es/components/select/src/option.d.ts","./node_modules/element-plus/es/components/select/src/type.d.ts","./node_modules/element-plus/es/components/select/src/select.vue.d.ts","./node_modules/element-plus/es/components/select/src/option.vue.d.ts","./node_modules/element-plus/es/components/select/src/option-group.vue.d.ts","./node_modules/element-plus/es/components/select/src/token.d.ts","./node_modules/element-plus/es/components/select/index.d.ts","./node_modules/element-plus/es/components/select-v2/index.d.ts","./node_modules/element-plus/es/components/skeleton/src/skeleton.d.ts","./node_modules/element-plus/es/components/skeleton/src/skeleton.vue.d.ts","./node_modules/element-plus/es/components/skeleton/src/skeleton-item.d.ts","./node_modules/element-plus/es/components/skeleton/src/skeleton-item.vue.d.ts","./node_modules/element-plus/es/components/skeleton/index.d.ts","./node_modules/element-plus/es/components/slider/src/slider.vue.d.ts","./node_modules/element-plus/es/components/slider/src/marker.d.ts","./node_modules/element-plus/es/components/slider/src/slider.d.ts","./node_modules/element-plus/es/components/slider/src/constants.d.ts","./node_modules/element-plus/es/components/slider/index.d.ts","./node_modules/element-plus/es/components/space/src/space.d.ts","./node_modules/element-plus/es/components/space/src/item.d.ts","./node_modules/element-plus/es/components/space/src/use-space.d.ts","./node_modules/element-plus/es/components/space/index.d.ts","./node_modules/element-plus/es/components/statistic/src/statistic.d.ts","./node_modules/element-plus/es/components/statistic/src/statistic.vue.d.ts","./node_modules/element-plus/es/components/statistic/index.d.ts","./node_modules/element-plus/es/components/steps/src/steps.d.ts","./node_modules/element-plus/es/components/steps/src/steps.vue.d.ts","./node_modules/element-plus/es/components/steps/src/item.d.ts","./node_modules/element-plus/es/components/steps/src/item.vue.d.ts","./node_modules/element-plus/es/components/steps/src/tokens.d.ts","./node_modules/element-plus/es/components/steps/index.d.ts","./node_modules/element-plus/es/components/switch/src/switch.d.ts","./node_modules/element-plus/es/components/switch/src/switch.vue.d.ts","./node_modules/element-plus/es/components/switch/index.d.ts","./node_modules/element-plus/es/components/table-v2/src/constants.d.ts","./node_modules/element-plus/es/components/table-v2/src/types.d.ts","./node_modules/element-plus/es/components/table-v2/src/common.d.ts","./node_modules/element-plus/es/components/table-v2/src/row.d.ts","./node_modules/element-plus/es/components/table-v2/src/grid.d.ts","./node_modules/element-plus/es/components/table-v2/src/table.d.ts","./node_modules/element-plus/es/components/table-v2/src/table-grid.d.ts","./node_modules/element-plus/es/components/table-v2/src/composables/use-scrollbar.d.ts","./node_modules/element-plus/es/components/table-v2/src/table-v2.d.ts","./node_modules/element-plus/es/components/table-v2/src/components/auto-resizer.d.ts","./node_modules/element-plus/es/components/table-v2/src/auto-resizer.d.ts","./node_modules/element-plus/es/components/table-v2/src/private.d.ts","./node_modules/element-plus/es/components/table-v2/src/cell.d.ts","./node_modules/element-plus/es/components/table-v2/src/components/cell.d.ts","./node_modules/element-plus/es/components/table-v2/src/header-cell.d.ts","./node_modules/element-plus/es/components/table-v2/src/components/header-cell.d.ts","./node_modules/element-plus/es/components/table-v2/src/header-row.d.ts","./node_modules/element-plus/es/components/table-v2/src/components/header-row.d.ts","./node_modules/element-plus/es/components/table-v2/src/header.d.ts","./node_modules/element-plus/es/components/table-v2/src/composables/use-columns.d.ts","./node_modules/element-plus/es/components/table-v2/src/components/header.d.ts","./node_modules/element-plus/es/components/table-v2/src/components/row.d.ts","./node_modules/element-plus/es/components/table-v2/src/components/sort-icon.d.ts","./node_modules/element-plus/es/components/table-v2/src/components/expand-icon.d.ts","./node_modules/element-plus/es/components/table-v2/src/components/index.d.ts","./node_modules/element-plus/es/components/table-v2/src/composables/use-row.d.ts","./node_modules/element-plus/es/components/table-v2/src/composables/use-data.d.ts","./node_modules/element-plus/es/components/table-v2/src/composables/use-styles.d.ts","./node_modules/element-plus/es/components/table-v2/src/composables/use-auto-resize.d.ts","./node_modules/element-plus/es/components/table-v2/src/composables/index.d.ts","./node_modules/element-plus/es/components/table-v2/src/use-table.d.ts","./node_modules/element-plus/es/components/table-v2/src/renderers/header-cell.d.ts","./node_modules/element-plus/es/components/table-v2/index.d.ts","./node_modules/element-plus/es/components/tabs/src/tab-pane.vue.d.ts","./node_modules/element-plus/es/components/tabs/src/tab-pane.d.ts","./node_modules/element-plus/es/components/tabs/src/constants.d.ts","./node_modules/element-plus/es/components/tabs/src/tab-bar.vue.d.ts","./node_modules/element-plus/es/components/tabs/src/tab-bar.d.ts","./node_modules/element-plus/es/components/tabs/src/tab-nav.d.ts","./node_modules/element-plus/es/components/tabs/src/tabs.d.ts","./node_modules/element-plus/es/components/tabs/index.d.ts","./node_modules/element-plus/es/components/text/src/text.d.ts","./node_modules/element-plus/es/components/text/src/text.vue.d.ts","./node_modules/element-plus/es/components/text/index.d.ts","./node_modules/element-plus/es/components/time-select/src/time-select.d.ts","./node_modules/element-plus/es/components/time-select/src/time-select.vue.d.ts","./node_modules/element-plus/es/components/time-select/index.d.ts","./node_modules/element-plus/es/components/timeline/src/timeline.d.ts","./node_modules/element-plus/es/components/timeline/src/timeline-item.d.ts","./node_modules/element-plus/es/components/timeline/src/timeline-item.vue.d.ts","./node_modules/element-plus/es/components/timeline/src/tokens.d.ts","./node_modules/element-plus/es/components/timeline/index.d.ts","./node_modules/element-plus/es/components/transfer/src/transfer.d.ts","./node_modules/element-plus/es/components/transfer/src/transfer-panel.vue.d.ts","./node_modules/element-plus/es/components/transfer/src/transfer-panel.d.ts","./node_modules/element-plus/es/components/transfer/src/transfer.vue.d.ts","./node_modules/element-plus/es/components/transfer/index.d.ts","./node_modules/element-plus/es/components/tree/src/tree.d.ts","./node_modules/element-plus/es/components/tree/src/model/usedragnode.d.ts","./node_modules/element-plus/es/components/tree/src/tree.type.d.ts","./node_modules/element-plus/es/components/tree/src/model/tree-store.d.ts","./node_modules/element-plus/es/components/tree/src/model/node.d.ts","./node_modules/element-plus/es/components/tree/src/tree.vue.d.ts","./node_modules/element-plus/es/components/tree/src/instance.d.ts","./node_modules/element-plus/es/components/tree/src/tokens.d.ts","./node_modules/element-plus/es/components/tree/index.d.ts","./node_modules/element-plus/es/components/tree-select/src/tree-select.vue.d.ts","./node_modules/element-plus/es/components/tree-select/src/instance.d.ts","./node_modules/element-plus/es/components/tree-select/index.d.ts","./node_modules/element-plus/es/components/tree-v2/src/types.d.ts","./node_modules/element-plus/es/components/tree-v2/src/virtual-tree.d.ts","./node_modules/element-plus/es/components/tree-v2/src/tree.vue.d.ts","./node_modules/element-plus/es/components/tree-v2/src/instance.d.ts","./node_modules/element-plus/es/components/tree-v2/index.d.ts","./node_modules/element-plus/es/components/upload/src/ajax.d.ts","./node_modules/element-plus/es/components/upload/src/upload.d.ts","./node_modules/element-plus/es/components/upload/src/upload.vue.d.ts","./node_modules/element-plus/es/components/upload/src/upload-content.vue.d.ts","./node_modules/element-plus/es/components/upload/src/upload-content.d.ts","./node_modules/element-plus/es/components/upload/src/upload-list.vue.d.ts","./node_modules/element-plus/es/components/upload/src/upload-list.d.ts","./node_modules/element-plus/es/components/upload/src/upload-dragger.vue.d.ts","./node_modules/element-plus/es/components/upload/src/upload-dragger.d.ts","./node_modules/element-plus/es/components/upload/src/constants.d.ts","./node_modules/element-plus/es/components/upload/index.d.ts","./node_modules/element-plus/es/components/watermark/src/watermark.d.ts","./node_modules/element-plus/es/components/watermark/src/watermark.vue.d.ts","./node_modules/element-plus/es/components/watermark/index.d.ts","./node_modules/element-plus/es/components/tour/src/content.d.ts","./node_modules/element-plus/es/components/tour/src/types.d.ts","./node_modules/element-plus/es/components/tour/src/tour.d.ts","./node_modules/element-plus/es/components/tour/src/tour.vue.d.ts","./node_modules/element-plus/es/components/tour/src/step.d.ts","./node_modules/element-plus/es/components/tour/src/step.vue.d.ts","./node_modules/element-plus/es/components/tour/index.d.ts","./node_modules/element-plus/es/components/anchor/src/anchor.d.ts","./node_modules/element-plus/es/components/anchor/src/anchor.vue.d.ts","./node_modules/element-plus/es/components/anchor/src/anchor-link.d.ts","./node_modules/element-plus/es/components/anchor/src/anchor-link.vue.d.ts","./node_modules/element-plus/es/components/anchor/index.d.ts","./node_modules/element-plus/es/components/segmented/src/types.d.ts","./node_modules/element-plus/es/components/segmented/src/segmented.vue.d.ts","./node_modules/element-plus/es/components/segmented/src/segmented.d.ts","./node_modules/element-plus/es/components/segmented/index.d.ts","./node_modules/element-plus/es/components/mention/src/types.d.ts","./node_modules/element-plus/es/components/mention/src/helper.d.ts","./node_modules/element-plus/es/components/mention/src/mention.d.ts","./node_modules/element-plus/es/components/mention/src/mention.vue.d.ts","./node_modules/element-plus/es/components/mention/index.d.ts","./node_modules/element-plus/es/components/splitter/src/type.d.ts","./node_modules/element-plus/es/components/splitter/src/splitter.d.ts","./node_modules/element-plus/es/components/splitter/src/splitter.vue.d.ts","./node_modules/element-plus/es/components/splitter/src/split-panel.d.ts","./node_modules/element-plus/es/components/splitter/src/split-panel.vue.d.ts","./node_modules/element-plus/es/components/splitter/index.d.ts","./node_modules/element-plus/es/components/infinite-scroll/src/index.d.ts","./node_modules/element-plus/es/components/infinite-scroll/index.d.ts","./node_modules/element-plus/es/components/loading/src/types.d.ts","./node_modules/element-plus/es/components/loading/src/loading.d.ts","./node_modules/element-plus/es/components/loading/src/service.d.ts","./node_modules/element-plus/es/components/loading/src/directive.d.ts","./node_modules/element-plus/es/components/loading/index.d.ts","./node_modules/element-plus/es/components/message-box/src/message-box.type.d.ts","./node_modules/element-plus/es/components/message-box/src/messagebox.d.ts","./node_modules/element-plus/es/components/message-box/index.d.ts","./node_modules/element-plus/es/components/notification/src/notification.vue.d.ts","./node_modules/element-plus/es/components/notification/src/notification.d.ts","./node_modules/element-plus/es/components/notification/index.d.ts","./node_modules/element-plus/es/components/popover/src/popover.d.ts","./node_modules/element-plus/es/components/popover/src/popover.vue.d.ts","./node_modules/element-plus/es/components/popover/src/directive.d.ts","./node_modules/element-plus/es/components/popover/index.d.ts","./node_modules/element-plus/es/components/index.d.ts","./node_modules/element-plus/es/defaults.d.ts","./node_modules/element-plus/es/directives/click-outside/index.d.ts","./node_modules/element-plus/es/directives/repeat-click/index.d.ts","./node_modules/element-plus/es/directives/trap-focus/index.d.ts","./node_modules/normalize-wheel-es/index.d.ts","./node_modules/element-plus/es/directives/mousewheel/index.d.ts","./node_modules/element-plus/es/directives/index.d.ts","./node_modules/element-plus/es/make-installer.d.ts","./node_modules/element-plus/es/index.d.ts","./src/utils/feedback.ts","./src/layout/default/components/header/user-drop-down.vue","./src/layout/default/components/header/index.vue","./src/layout/default/components/main.vue","./src/layout/default/components/sidebar/logo.vue","./src/utils/util.ts","./src/layout/default/components/sidebar/menu-item.vue","./src/layout/default/components/sidebar/menu.vue","./src/layout/default/components/sidebar/side.vue","./src/layout/default/components/sidebar/index.vue","./src/layout/default/index.vue","./src/views/error/components/error.vue","./src/views/error/404.vue","./src/views/error/403.vue","./node_modules/@element-plus/icons-vue/dist/types/components/add-location.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/aim.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/alarm-clock.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/apple.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/arrow-down-bold.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/arrow-down.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/arrow-left-bold.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/arrow-left.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/arrow-right-bold.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/arrow-right.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/arrow-up-bold.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/arrow-up.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/avatar.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/back.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/baseball.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/basketball.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/bell-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/bell.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/bicycle.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/bottom-left.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/bottom-right.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/bottom.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/bowl.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/box.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/briefcase.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/brush-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/brush.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/burger.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/calendar.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/camera-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/camera.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/caret-bottom.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/caret-left.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/caret-right.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/caret-top.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/cellphone.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/chat-dot-round.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/chat-dot-square.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/chat-line-round.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/chat-line-square.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/chat-round.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/chat-square.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/check.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/checked.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/cherry.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/chicken.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/chrome-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/circle-check-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/circle-check.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/circle-close-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/circle-close.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/circle-plus-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/circle-plus.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/clock.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/close-bold.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/close.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/cloudy.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/coffee-cup.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/coffee.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/coin.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/cold-drink.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/collection-tag.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/collection.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/comment.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/compass.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/connection.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/coordinate.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/copy-document.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/cpu.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/credit-card.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/crop.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/d-arrow-left.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/d-arrow-right.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/d-caret.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/data-analysis.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/data-board.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/data-line.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/delete-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/delete-location.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/delete.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/dessert.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/discount.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/dish-dot.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/dish.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/document-add.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/document-checked.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/document-copy.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/document-delete.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/document-remove.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/document.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/download.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/drizzling.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/edit-pen.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/edit.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/eleme-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/eleme.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/element-plus.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/expand.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/failed.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/female.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/files.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/film.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/filter.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/finished.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/first-aid-kit.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/flag.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/fold.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/folder-add.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/folder-checked.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/folder-delete.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/folder-opened.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/folder-remove.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/folder.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/food.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/football.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/fork-spoon.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/fries.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/full-screen.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/goblet-full.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/goblet-square-full.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/goblet-square.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/goblet.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/gold-medal.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/goods-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/goods.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/grape.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/grid.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/guide.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/handbag.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/headset.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/help-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/help.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/hide.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/histogram.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/home-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/hot-water.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/house.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/ice-cream-round.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/ice-cream-square.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/ice-cream.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/ice-drink.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/ice-tea.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/info-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/iphone.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/key.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/knife-fork.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/lightning.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/link.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/list.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/loading.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/location-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/location-information.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/location.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/lock.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/lollipop.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/magic-stick.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/magnet.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/male.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/management.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/map-location.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/medal.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/memo.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/menu.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/message-box.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/message.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/mic.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/microphone.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/milk-tea.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/minus.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/money.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/monitor.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/moon-night.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/moon.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/more-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/more.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/mostly-cloudy.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/mouse.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/mug.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/mute-notification.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/mute.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/no-smoking.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/notebook.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/notification.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/odometer.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/office-building.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/open.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/operation.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/opportunity.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/orange.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/paperclip.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/partly-cloudy.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/pear.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/phone-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/phone.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/picture-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/picture-rounded.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/picture.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/pie-chart.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/place.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/platform.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/plus.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/pointer.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/position.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/postcard.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/pouring.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/present.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/price-tag.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/printer.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/promotion.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/quartz-watch.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/question-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/rank.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/reading-lamp.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/reading.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/refresh-left.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/refresh-right.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/refresh.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/refrigerator.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/remove-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/remove.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/right.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/scale-to-original.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/school.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/scissor.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/search.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/select.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sell.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/semi-select.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/service.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/set-up.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/setting.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/share.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/ship.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/shop.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/shopping-bag.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/shopping-cart-full.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/shopping-cart.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/shopping-trolley.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/smoking.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/soccer.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sold-out.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sort-down.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sort-up.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sort.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/stamp.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/star-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/star.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/stopwatch.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/success-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sugar.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/suitcase-line.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/suitcase.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sunny.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sunrise.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sunset.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/switch-button.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/switch-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/switch.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/takeaway-box.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/ticket.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/tickets.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/timer.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/toilet-paper.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/tools.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/top-left.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/top-right.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/top.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/trend-charts.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/trophy-base.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/trophy.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/turn-off.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/umbrella.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/unlock.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/upload-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/upload.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/user-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/user.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/van.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/video-camera-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/video-camera.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/video-pause.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/video-play.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/view.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/wallet-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/wallet.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/warn-triangle-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/warning-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/warning.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/watch.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/watermelon.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/wind-power.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/zoom-in.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/zoom-out.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/index.d.ts","./node_modules/@element-plus/icons-vue/dist/types/index.d.ts","./src/hooks/uselockfn.ts","./src/layout/components/footer.vue","./src/views/account/login.vue","./src/views/account/change-password.vue","./src/utils/wecomoauthpostmessage.ts","./src/views/account/bind-work-wechat.vue","./src/views/user/setting.vue","./src/api/doctor.ts","./src/views/doctor/progress.vue","./src/api/decoration.ts","./src/views/decoration/component/widgets/index.ts","./src/views/decoration/component/pages/preview-pc.vue","./src/views/decoration/pc_details.vue","./src/api/fans.ts","./src/views/fans/h5.vue","./src/api/tcm.ts","./src/api/channel/weapp.ts","./src/utils/perm.ts","./node_modules/echarts/types/dist/echarts.d.ts","./node_modules/echarts/index.d.ts","./src/views/tcm/diagnosis/components/bloodrecordlist.vue","./src/views/tcm/diagnosis/components/dietrecordlist.vue","./src/views/tcm/diagnosis/components/exerciserecordlist.vue","./src/views/tcm/diagnosis/components/caserecordlist.vue","./src/views/tcm/diagnosis/components/callrecordpanel.vue","./src/utils/im-business-message-parse.ts","./src/views/tcm/diagnosis/components/imchatrecordpanel.vue","./src/views/tcm/diagnosis/components/assignlogpanel.vue","./src/views/tcm/diagnosis/components/appointmentrecordpanel.vue","./src/api/medicine.ts","./src/components/medicine-name-select/index.vue","./src/utils/diabetes-discovery-display.ts","./node_modules/html2canvas/dist/types/core/logger.d.ts","./node_modules/html2canvas/dist/types/core/cache-storage.d.ts","./node_modules/html2canvas/dist/types/core/context.d.ts","./node_modules/html2canvas/dist/types/css/layout/bounds.d.ts","./node_modules/html2canvas/dist/types/dom/document-cloner.d.ts","./node_modules/html2canvas/dist/types/css/syntax/tokenizer.d.ts","./node_modules/html2canvas/dist/types/css/syntax/parser.d.ts","./node_modules/html2canvas/dist/types/css/types/index.d.ts","./node_modules/html2canvas/dist/types/css/ipropertydescriptor.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/background-clip.d.ts","./node_modules/html2canvas/dist/types/css/itypedescriptor.d.ts","./node_modules/html2canvas/dist/types/css/types/color.d.ts","./node_modules/html2canvas/dist/types/css/types/length-percentage.d.ts","./node_modules/html2canvas/dist/types/css/types/image.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/background-image.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/background-origin.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/background-position.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/background-repeat.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/background-size.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/border-radius.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/border-style.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/border-width.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/direction.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/display.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/float.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/letter-spacing.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/line-break.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/list-style-image.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/list-style-position.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/list-style-type.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/overflow.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/overflow-wrap.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/text-align.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/position.d.ts","./node_modules/html2canvas/dist/types/css/types/length.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/text-shadow.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/text-transform.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/transform.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/transform-origin.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/visibility.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/word-break.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/z-index.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/opacity.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/text-decoration-line.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/font-family.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/font-weight.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/font-variant.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/font-style.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/content.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/counter-increment.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/counter-reset.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/duration.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/quotes.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/box-shadow.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/paint-order.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/webkit-text-stroke-width.d.ts","./node_modules/html2canvas/dist/types/css/index.d.ts","./node_modules/html2canvas/dist/types/css/layout/text.d.ts","./node_modules/html2canvas/dist/types/dom/text-container.d.ts","./node_modules/html2canvas/dist/types/dom/element-container.d.ts","./node_modules/html2canvas/dist/types/render/vector.d.ts","./node_modules/html2canvas/dist/types/render/bezier-curve.d.ts","./node_modules/html2canvas/dist/types/render/path.d.ts","./node_modules/html2canvas/dist/types/render/bound-curves.d.ts","./node_modules/html2canvas/dist/types/render/effects.d.ts","./node_modules/html2canvas/dist/types/render/stacking-context.d.ts","./node_modules/html2canvas/dist/types/dom/replaced-elements/canvas-element-container.d.ts","./node_modules/html2canvas/dist/types/dom/replaced-elements/image-element-container.d.ts","./node_modules/html2canvas/dist/types/dom/replaced-elements/svg-element-container.d.ts","./node_modules/html2canvas/dist/types/dom/replaced-elements/index.d.ts","./node_modules/html2canvas/dist/types/render/renderer.d.ts","./node_modules/html2canvas/dist/types/render/canvas/canvas-renderer.d.ts","./node_modules/html2canvas/dist/types/index.d.ts","./node_modules/jspdf/types/index.d.ts","./src/components/tcm-prescription/index.vue","./src/utils/diagnosis-sync-events.ts","./src/views/tcm/diagnosis/edit.vue","./src/views/tcm/diagnosis/detail.vue","./node_modules/dayjs/plugin/isoweek.d.ts","./src/views/tcm/diagnosis/appointment.vue","./src/views/tcm/diagnosis/index_h5.vue","./src/router/routes.ts","./src/router/index.ts","./src/utils/request/cancel.ts","./src/utils/request/type.d.ts","./src/utils/request/axios.ts","./src/utils/wecombindguard.ts","./src/utils/request/index.ts","./src/api/app.ts","./src/stores/modules/app.ts","./src/api/chat.ts","./src/components/chat-notify-toast/index.vue","./src/app.vue","./src/permission.ts","./src/install/index.ts","./src/main.ts","./src/api/article.ts","./src/api/consumer.ts","./src/api/file.ts","./src/api/finance.ts","./src/api/message.ts","./src/api/order.ts","./src/api/qywx-msg.ts","./src/api/qywx.ts","./src/api/stats.ts","./src/api/app/recharge.ts","./src/api/channel/h5.ts","./src/api/channel/open_setting.ts","./src/api/channel/wx_oa.ts","./src/api/org/department.ts","./src/api/org/post.ts","./src/api/perms/admin.ts","./src/api/perms/menu.ts","./src/api/perms/role.ts","./src/api/setting/dict.ts","./src/api/setting/pay.ts","./src/api/setting/search.ts","./src/api/setting/storage.ts","./src/api/setting/user.ts","./src/api/setting/website.ts","./src/api/tools/code.ts","./node_modules/@tencentcloud/chat-uikit-vue3/dist/components/chat/chat.vue.d.ts","./node_modules/@tencentcloud/chat-uikit-vue3/dist/components/chat/index.d.ts","./node_modules/@tencentcloud/chat-uikit-vue3/dist/components/chatheader/chatheader.vue.d.ts","./node_modules/@tencentcloud/chat-uikit-vue3/dist/components/chatheader/hooks/usechatheader.d.ts","./node_modules/@tencentcloud/chat-uikit-vue3/dist/components/chatheader/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/login.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/loginstate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/avatar/avatar.vue.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/avatar/constants/avatar.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/avatar/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/userpicker/type.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/userpicker/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/basecomp/view/view.vue.d.ts","./node_modules/tuikit-atomicx-vue3/dist/basecomp/view/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/chatsetting/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/uikitmodalstate/uikitmodalstate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/uikitmodalstate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/uikitmodal/type.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/uikitmodal/uikitmodal.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/uikitmodal/useroommodal/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/uikitmodal/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/subentry/common/base.d.ts","./node_modules/@tencentcloud/tuiroom-engine-js/node_modules/@tencentcloud/chat/index.d.ts","./node_modules/@tencentcloud/tuiroom-engine-js/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/device.d.ts","./node_modules/@tencentcloud/chat/index.d.ts","./node_modules/@tencentcloud/chat-uikit-engine/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/message.d.ts","./node_modules/tuikit-atomicx-vue3/dist/hooks/useofflinepushinfo/types.d.ts","./node_modules/tuikit-atomicx-vue3/dist/hooks/useofflinepushinfo/useofflinepushinfo.d.ts","./node_modules/tuikit-atomicx-vue3/dist/hooks/useofflinepushinfo/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/engine.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/search.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/contact.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/conversation.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/call.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/groupsettingstate/types.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/chatsetting.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/types.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/live.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/stream.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/videomixer.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/audience.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/seat.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/monitor.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/coguest.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/cohost.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/battle.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/barrage.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/room.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/participant.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/beauty.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/virtualbackground.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/user.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/devicestate/devicestate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/devicestate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/hooks/useroomengine.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/audiosettingpanel/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/videosettingpanel/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/subentry/common/rtc.d.ts","./node_modules/tuikit-atomicx-vue3/dist/subentry/common/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/barragestate/barragestate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/barragestate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/battlestate/battlestate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/battlestate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/cogueststate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/cohoststate/cohoststate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/cohoststate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/liveaudiencestate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/liveliststate/liveliststate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/liveliststate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/livemonitorstate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/utils/eventcenter.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/liveseatstate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/videomixerstate/videomixerstate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/videomixerstate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/barrageinput/barrageinputh5.vue.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/barrageinput/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/barragelist/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/camerabutton/index.vue.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/camerabutton/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/coguestpanel/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/cohostpanel/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/liveaudiencelist/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/livelist/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/livemonitorview/livemonitorview.vue.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/livemonitorview/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/livescenepanel/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/liveview/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/micbutton/index.vue.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/micbutton/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/streammixer/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/subentry/live/live.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/asr.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/asrstate/asrstate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/freebeautystate/freebeautystate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/freebeautystate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/roomparticipantstate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/roomstate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/virtualbackgroundstate/virtualbackgroundstate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/virtualbackgroundstate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/roomparticipantlist/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/roomparticipantview/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/roomview/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/scheduleroompanel/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/virtualbackgroundpanel/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/freebeautypanel/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/subentry/room/room.d.ts","./node_modules/tuikit-atomicx-vue3/dist/i18n/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/contactlist/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/conversationlist/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/messageinput/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/hooks/usemessageactions.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/messagelist/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/search/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/c2csettingstate/c2csettingstate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/c2csettingstate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/contactliststate/contactliststate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/contactliststate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/conversationliststate/conversationliststate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/conversationliststate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/groupsettingstate/groupsettingstate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/groupsettingstate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/messageactionstate/messageactionstate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/messageactionstate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/messageinputstate/type.d.ts","./node_modules/orderedmap/dist/index.d.ts","./node_modules/prosemirror-model/dist/index.d.ts","./node_modules/prosemirror-transform/dist/index.d.ts","./node_modules/prosemirror-view/dist/index.d.ts","./node_modules/prosemirror-state/dist/index.d.ts","./node_modules/@tiptap/pm/state/dist/index.d.ts","./node_modules/@tiptap/pm/model/dist/index.d.ts","./node_modules/@tiptap/pm/view/dist/index.d.ts","./node_modules/@tiptap/core/dist/eventemitter.d.ts","./node_modules/@tiptap/pm/transform/dist/index.d.ts","./node_modules/@tiptap/core/dist/inputrule.d.ts","./node_modules/@tiptap/core/dist/pasterule.d.ts","./node_modules/@tiptap/core/dist/node.d.ts","./node_modules/@tiptap/core/dist/mark.d.ts","./node_modules/@tiptap/core/dist/extension.d.ts","./node_modules/@tiptap/core/dist/types.d.ts","./node_modules/@tiptap/core/dist/extensionmanager.d.ts","./node_modules/@tiptap/core/dist/nodepos.d.ts","./node_modules/@tiptap/core/dist/extensions/clipboardtextserializer.d.ts","./node_modules/@tiptap/core/dist/commands/blur.d.ts","./node_modules/@tiptap/core/dist/commands/clearcontent.d.ts","./node_modules/@tiptap/core/dist/commands/clearnodes.d.ts","./node_modules/@tiptap/core/dist/commands/command.d.ts","./node_modules/@tiptap/core/dist/commands/createparagraphnear.d.ts","./node_modules/@tiptap/core/dist/commands/cut.d.ts","./node_modules/@tiptap/core/dist/commands/deletecurrentnode.d.ts","./node_modules/@tiptap/core/dist/commands/deletenode.d.ts","./node_modules/@tiptap/core/dist/commands/deleterange.d.ts","./node_modules/@tiptap/core/dist/commands/deleteselection.d.ts","./node_modules/@tiptap/core/dist/commands/enter.d.ts","./node_modules/@tiptap/core/dist/commands/exitcode.d.ts","./node_modules/@tiptap/core/dist/commands/extendmarkrange.d.ts","./node_modules/@tiptap/core/dist/commands/first.d.ts","./node_modules/@tiptap/core/dist/commands/focus.d.ts","./node_modules/@tiptap/core/dist/commands/foreach.d.ts","./node_modules/@tiptap/core/dist/commands/insertcontent.d.ts","./node_modules/@tiptap/core/dist/commands/insertcontentat.d.ts","./node_modules/@tiptap/core/dist/commands/join.d.ts","./node_modules/@tiptap/core/dist/commands/joinitembackward.d.ts","./node_modules/@tiptap/core/dist/commands/joinitemforward.d.ts","./node_modules/@tiptap/core/dist/commands/jointextblockbackward.d.ts","./node_modules/@tiptap/core/dist/commands/jointextblockforward.d.ts","./node_modules/@tiptap/core/dist/commands/keyboardshortcut.d.ts","./node_modules/@tiptap/core/dist/commands/lift.d.ts","./node_modules/@tiptap/core/dist/commands/liftemptyblock.d.ts","./node_modules/@tiptap/core/dist/commands/liftlistitem.d.ts","./node_modules/@tiptap/core/dist/commands/newlineincode.d.ts","./node_modules/@tiptap/core/dist/commands/resetattributes.d.ts","./node_modules/@tiptap/core/dist/commands/scrollintoview.d.ts","./node_modules/@tiptap/core/dist/commands/selectall.d.ts","./node_modules/@tiptap/core/dist/commands/selectnodebackward.d.ts","./node_modules/@tiptap/core/dist/commands/selectnodeforward.d.ts","./node_modules/@tiptap/core/dist/commands/selectparentnode.d.ts","./node_modules/@tiptap/core/dist/commands/selecttextblockend.d.ts","./node_modules/@tiptap/core/dist/commands/selecttextblockstart.d.ts","./node_modules/@tiptap/core/dist/commands/setcontent.d.ts","./node_modules/@tiptap/core/dist/commands/setmark.d.ts","./node_modules/@tiptap/core/dist/commands/setmeta.d.ts","./node_modules/@tiptap/core/dist/commands/setnode.d.ts","./node_modules/@tiptap/core/dist/commands/setnodeselection.d.ts","./node_modules/@tiptap/core/dist/commands/settextselection.d.ts","./node_modules/@tiptap/core/dist/commands/sinklistitem.d.ts","./node_modules/@tiptap/core/dist/commands/splitblock.d.ts","./node_modules/@tiptap/core/dist/commands/splitlistitem.d.ts","./node_modules/@tiptap/core/dist/commands/togglelist.d.ts","./node_modules/@tiptap/core/dist/commands/togglemark.d.ts","./node_modules/@tiptap/core/dist/commands/togglenode.d.ts","./node_modules/@tiptap/core/dist/commands/togglewrap.d.ts","./node_modules/@tiptap/core/dist/commands/undoinputrule.d.ts","./node_modules/@tiptap/core/dist/commands/unsetallmarks.d.ts","./node_modules/@tiptap/core/dist/commands/unsetmark.d.ts","./node_modules/@tiptap/core/dist/commands/updateattributes.d.ts","./node_modules/@tiptap/core/dist/commands/wrapin.d.ts","./node_modules/@tiptap/core/dist/commands/wrapinlist.d.ts","./node_modules/@tiptap/core/dist/commands/index.d.ts","./node_modules/@tiptap/core/dist/extensions/commands.d.ts","./node_modules/@tiptap/core/dist/extensions/drop.d.ts","./node_modules/@tiptap/core/dist/extensions/editable.d.ts","./node_modules/@tiptap/core/dist/extensions/focusevents.d.ts","./node_modules/@tiptap/core/dist/extensions/keymap.d.ts","./node_modules/@tiptap/core/dist/extensions/paste.d.ts","./node_modules/@tiptap/core/dist/extensions/tabindex.d.ts","./node_modules/@tiptap/core/dist/extensions/index.d.ts","./node_modules/@tiptap/core/dist/editor.d.ts","./node_modules/@tiptap/core/dist/commandmanager.d.ts","./node_modules/@tiptap/core/dist/helpers/combinetransactionsteps.d.ts","./node_modules/@tiptap/core/dist/helpers/createchainablestate.d.ts","./node_modules/@tiptap/core/dist/helpers/createdocument.d.ts","./node_modules/@tiptap/core/dist/helpers/createnodefromcontent.d.ts","./node_modules/@tiptap/core/dist/helpers/defaultblockat.d.ts","./node_modules/@tiptap/core/dist/helpers/findchildren.d.ts","./node_modules/@tiptap/core/dist/helpers/findchildreninrange.d.ts","./node_modules/@tiptap/core/dist/helpers/findparentnode.d.ts","./node_modules/@tiptap/core/dist/helpers/findparentnodeclosesttopos.d.ts","./node_modules/@tiptap/core/dist/helpers/generatehtml.d.ts","./node_modules/@tiptap/core/dist/helpers/generatejson.d.ts","./node_modules/@tiptap/core/dist/helpers/generatetext.d.ts","./node_modules/@tiptap/core/dist/helpers/getattributes.d.ts","./node_modules/@tiptap/core/dist/helpers/getattributesfromextensions.d.ts","./node_modules/@tiptap/core/dist/helpers/getchangedranges.d.ts","./node_modules/@tiptap/core/dist/helpers/getdebugjson.d.ts","./node_modules/@tiptap/core/dist/helpers/getextensionfield.d.ts","./node_modules/@tiptap/core/dist/helpers/gethtmlfromfragment.d.ts","./node_modules/@tiptap/core/dist/helpers/getmarkattributes.d.ts","./node_modules/@tiptap/core/dist/helpers/getmarkrange.d.ts","./node_modules/@tiptap/core/dist/helpers/getmarksbetween.d.ts","./node_modules/@tiptap/core/dist/helpers/getmarktype.d.ts","./node_modules/@tiptap/core/dist/helpers/getnodeatposition.d.ts","./node_modules/@tiptap/core/dist/helpers/getnodeattributes.d.ts","./node_modules/@tiptap/core/dist/helpers/getnodetype.d.ts","./node_modules/@tiptap/core/dist/helpers/getrenderedattributes.d.ts","./node_modules/@tiptap/core/dist/helpers/getschema.d.ts","./node_modules/@tiptap/core/dist/helpers/getschemabyresolvedextensions.d.ts","./node_modules/@tiptap/core/dist/helpers/getschematypebyname.d.ts","./node_modules/@tiptap/core/dist/helpers/getschematypenamebyname.d.ts","./node_modules/@tiptap/core/dist/helpers/getsplittedattributes.d.ts","./node_modules/@tiptap/core/dist/helpers/gettext.d.ts","./node_modules/@tiptap/core/dist/helpers/gettextbetween.d.ts","./node_modules/@tiptap/core/dist/helpers/gettextcontentfromnodes.d.ts","./node_modules/@tiptap/core/dist/helpers/gettextserializersfromschema.d.ts","./node_modules/@tiptap/core/dist/helpers/injectextensionattributestoparserule.d.ts","./node_modules/@tiptap/core/dist/helpers/isactive.d.ts","./node_modules/@tiptap/core/dist/helpers/isatendofnode.d.ts","./node_modules/@tiptap/core/dist/helpers/isatstartofnode.d.ts","./node_modules/@tiptap/core/dist/helpers/isextensionrulesenabled.d.ts","./node_modules/@tiptap/core/dist/helpers/islist.d.ts","./node_modules/@tiptap/core/dist/helpers/ismarkactive.d.ts","./node_modules/@tiptap/core/dist/helpers/isnodeactive.d.ts","./node_modules/@tiptap/core/dist/helpers/isnodeempty.d.ts","./node_modules/@tiptap/core/dist/helpers/isnodeselection.d.ts","./node_modules/@tiptap/core/dist/helpers/istextselection.d.ts","./node_modules/@tiptap/core/dist/helpers/postodomrect.d.ts","./node_modules/@tiptap/core/dist/helpers/resolvefocusposition.d.ts","./node_modules/@tiptap/core/dist/helpers/rewriteunknowncontent.d.ts","./node_modules/@tiptap/core/dist/helpers/selectiontoinsertionend.d.ts","./node_modules/@tiptap/core/dist/helpers/splitextensions.d.ts","./node_modules/@tiptap/core/dist/helpers/index.d.ts","./node_modules/@tiptap/core/dist/inputrules/markinputrule.d.ts","./node_modules/@tiptap/core/dist/inputrules/nodeinputrule.d.ts","./node_modules/@tiptap/core/dist/inputrules/textblocktypeinputrule.d.ts","./node_modules/@tiptap/core/dist/inputrules/textinputrule.d.ts","./node_modules/@tiptap/core/dist/inputrules/wrappinginputrule.d.ts","./node_modules/@tiptap/core/dist/inputrules/index.d.ts","./node_modules/@tiptap/core/dist/nodeview.d.ts","./node_modules/@tiptap/core/dist/pasterules/markpasterule.d.ts","./node_modules/@tiptap/core/dist/pasterules/nodepasterule.d.ts","./node_modules/@tiptap/core/dist/pasterules/textpasterule.d.ts","./node_modules/@tiptap/core/dist/pasterules/index.d.ts","./node_modules/@tiptap/core/dist/tracker.d.ts","./node_modules/@tiptap/core/dist/utilities/callorreturn.d.ts","./node_modules/@tiptap/core/dist/utilities/caninsertnode.d.ts","./node_modules/@tiptap/core/dist/utilities/createstyletag.d.ts","./node_modules/@tiptap/core/dist/utilities/deleteprops.d.ts","./node_modules/@tiptap/core/dist/utilities/elementfromstring.d.ts","./node_modules/@tiptap/core/dist/utilities/escapeforregex.d.ts","./node_modules/@tiptap/core/dist/utilities/findduplicates.d.ts","./node_modules/@tiptap/core/dist/utilities/fromstring.d.ts","./node_modules/@tiptap/core/dist/utilities/isemptyobject.d.ts","./node_modules/@tiptap/core/dist/utilities/isfunction.d.ts","./node_modules/@tiptap/core/dist/utilities/isios.d.ts","./node_modules/@tiptap/core/dist/utilities/ismacos.d.ts","./node_modules/@tiptap/core/dist/utilities/isnumber.d.ts","./node_modules/@tiptap/core/dist/utilities/isplainobject.d.ts","./node_modules/@tiptap/core/dist/utilities/isregexp.d.ts","./node_modules/@tiptap/core/dist/utilities/issafari.d.ts","./node_modules/@tiptap/core/dist/utilities/isstring.d.ts","./node_modules/@tiptap/core/dist/utilities/mergeattributes.d.ts","./node_modules/@tiptap/core/dist/utilities/mergedeep.d.ts","./node_modules/@tiptap/core/dist/utilities/minmax.d.ts","./node_modules/@tiptap/core/dist/utilities/objectincludes.d.ts","./node_modules/@tiptap/core/dist/utilities/removeduplicates.d.ts","./node_modules/@tiptap/core/dist/utilities/index.d.ts","./node_modules/@tiptap/core/dist/index.d.ts","./node_modules/tippy.js/index.d.ts","./node_modules/@tiptap/extension-bubble-menu/dist/bubble-menu-plugin.d.ts","./node_modules/@tiptap/extension-bubble-menu/dist/bubble-menu.d.ts","./node_modules/@tiptap/extension-bubble-menu/dist/index.d.ts","./node_modules/@tiptap/vue-3/dist/bubblemenu.d.ts","./node_modules/@tiptap/vue-3/dist/editor.d.ts","./node_modules/@tiptap/vue-3/dist/editorcontent.d.ts","./node_modules/@tiptap/extension-floating-menu/dist/floating-menu-plugin.d.ts","./node_modules/@tiptap/extension-floating-menu/dist/floating-menu.d.ts","./node_modules/@tiptap/extension-floating-menu/dist/index.d.ts","./node_modules/@tiptap/vue-3/dist/floatingmenu.d.ts","./node_modules/@tiptap/vue-3/dist/nodeviewcontent.d.ts","./node_modules/@tiptap/vue-3/dist/nodeviewwrapper.d.ts","./node_modules/@tiptap/vue-3/dist/useeditor.d.ts","./node_modules/@tiptap/vue-3/dist/vuenodeviewrenderer.d.ts","./node_modules/@tiptap/vue-3/dist/vuerenderer.d.ts","./node_modules/@tiptap/vue-3/dist/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/messageinputstate/messageinputstate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/messageinputstate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/messageliststate/messageliststate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/messageliststate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/subentry/chat/chat.d.ts","./node_modules/tuikit-atomicx-vue3/dist/subentry/chat/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/constants/interface.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/node_modules/i18next/typescript/helpers.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/node_modules/i18next/typescript/options.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/node_modules/i18next/typescript/t.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/node_modules/i18next/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/node_modules/i18next/index.d.mts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/providers/uikitprovider/i18n/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/providers/uikitprovider/contexts/languageprovider/uselanguageprovider.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/providers/uikitprovider/contexts/languageprovider/languageprovider.vue.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/providers/uikitprovider/contexts/languageprovider/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/providers/uikitprovider/contexts/uikitprovider/uikitprovider.vue.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/providers/uikitprovider/contexts/uikitprovider/useuikitprovider.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/providers/uikitprovider/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/button/types.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/button/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/dialog/type.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/dialog/dialog.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/dialog/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/drawer/types.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/drawer/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/dropdown/types.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/dropdown/index.vue.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/dropdown/dropdownitem.vue.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/dropdown/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/icon/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/messagebox/i18n/en-us/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/messagebox/i18n/zh-cn/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/messagebox/i18n/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/messagebox/type.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/messagebox/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/badge/types.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/badge/index.vue.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/badge/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/input/types.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/input/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/select/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/option/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/switch/types.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/switch/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/slider/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/swiper/type.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/swiper/index.vue.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/swiper/swiperitem.vue.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/swiper/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/toast/type.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/toast/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/watermark/index.vue.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/watermark/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/popup/type.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/popup/index.vue.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/popup/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/hooks/usecomponent.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/hooks/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/utils/utils.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/directives/loading/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/directives/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/index.d.ts","./node_modules/@tencentcloud/chat-uikit-vue3/dist/index.d.ts","./src/components/sidetab.vue","./src/components/app-link/index.vue","./src/components/chat-dialog/chatmessageitem.vue","./src/utils/call-local-recorder.ts","./src/utils/call-video-screenshot.ts","./src/utils/tuicall-error.ts","./src/utils/im-call-hangup-detect.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/const/call.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/const/error.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/const/log.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/const/index.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/interface/icallservice.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/interface/icallstore.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/interface/ituiglobal.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/interface/ituistore.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/interface/index.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/callservice/uidesign.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/callservice/index.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/locales/index.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/index.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/index.d.ts","./node_modules/@tencentcloud/call-engine-js/index.d.ts","./src/components/chat-dialog/index.vue","./src/components/color-picker/index.vue","./src/components/daterange-picker/index.vue","./src/components/del-wrap/index.vue","./src/components/dict-value/index.vue","./node_modules/@wangeditor/editor/dist/editor/src/utils/browser-polyfill.d.ts","./node_modules/@wangeditor/editor/dist/editor/src/utils/node-polyfill.d.ts","./node_modules/@wangeditor/editor/dist/editor/src/locale/index.d.ts","./node_modules/@wangeditor/editor/dist/editor/src/register-builtin-modules/index.d.ts","./node_modules/@wangeditor/editor/dist/editor/src/init-default-config/index.d.ts","./node_modules/slate/dist/create-editor.d.ts","./node_modules/slate/dist/interfaces/element.d.ts","./node_modules/slate/dist/interfaces/node.d.ts","./node_modules/slate/dist/interfaces/editor.d.ts","./node_modules/slate/dist/interfaces/location.d.ts","./node_modules/slate/dist/interfaces/operation.d.ts","./node_modules/slate/dist/interfaces/path.d.ts","./node_modules/slate/dist/interfaces/path-ref.d.ts","./node_modules/slate/dist/interfaces/point.d.ts","./node_modules/slate/dist/interfaces/point-ref.d.ts","./node_modules/slate/dist/interfaces/range.d.ts","./node_modules/slate/dist/interfaces/range-ref.d.ts","./node_modules/slate/dist/interfaces/custom-types.d.ts","./node_modules/slate/dist/interfaces/text.d.ts","./node_modules/slate/dist/transforms/general.d.ts","./node_modules/slate/dist/transforms/node.d.ts","./node_modules/slate/dist/transforms/selection.d.ts","./node_modules/slate/dist/transforms/text.d.ts","./node_modules/slate/dist/transforms/index.d.ts","./node_modules/slate/dist/index.d.ts","./node_modules/snabbdom/build/htmldomapi.d.ts","./node_modules/snabbdom/build/helpers/attachto.d.ts","./node_modules/snabbdom/build/modules/style.d.ts","./node_modules/snabbdom/build/modules/eventlisteners.d.ts","./node_modules/snabbdom/build/modules/attributes.d.ts","./node_modules/snabbdom/build/modules/class.d.ts","./node_modules/snabbdom/build/modules/props.d.ts","./node_modules/snabbdom/build/modules/dataset.d.ts","./node_modules/snabbdom/build/vnode.d.ts","./node_modules/snabbdom/build/hooks.d.ts","./node_modules/snabbdom/build/modules/module.d.ts","./node_modules/snabbdom/build/init.d.ts","./node_modules/snabbdom/build/thunk.d.ts","./node_modules/snabbdom/build/is.d.ts","./node_modules/snabbdom/build/tovnode.d.ts","./node_modules/snabbdom/build/h.d.ts","./node_modules/snabbdom/build/jsx.d.ts","./node_modules/snabbdom/build/index.d.ts","./node_modules/@types/event-emitter/index.d.ts","./node_modules/dom7/dom7.d.ts","./node_modules/@wangeditor/core/dist/core/src/utils/dom.d.ts","./node_modules/@wangeditor/core/dist/core/src/menus/interface.d.ts","./node_modules/@wangeditor/core/dist/core/src/config/interface.d.ts","./node_modules/@wangeditor/core/dist/core/src/editor/interface.d.ts","./node_modules/@wangeditor/core/dist/core/src/render/index.d.ts","./node_modules/@wangeditor/core/dist/core/src/to-html/index.d.ts","./node_modules/@wangeditor/core/dist/core/src/parse-html/index.d.ts","./node_modules/@wangeditor/core/dist/core/src/menus/bar/toolbar.d.ts","./node_modules/@wangeditor/core/dist/core/src/menus/register.d.ts","./node_modules/@wangeditor/core/dist/core/src/menus/panel-and-modal/baseclass.d.ts","./node_modules/@wangeditor/core/dist/core/src/menus/panel-and-modal/modal.d.ts","./node_modules/@wangeditor/core/dist/core/src/menus/index.d.ts","./node_modules/slate-history/dist/history.d.ts","./node_modules/slate-history/dist/history-editor.d.ts","./node_modules/slate-history/dist/with-history.d.ts","./node_modules/slate-history/dist/index.d.ts","./node_modules/@wangeditor/core/dist/core/src/create/create-editor.d.ts","./node_modules/@wangeditor/core/dist/core/src/create/create-toolbar.d.ts","./node_modules/@wangeditor/core/dist/core/src/create/index.d.ts","./node_modules/@wangeditor/core/dist/core/src/utils/key.d.ts","./node_modules/@wangeditor/core/dist/core/src/text-area/textarea.d.ts","./node_modules/@wangeditor/core/dist/core/src/menus/bar/hoverbar.d.ts","./node_modules/@wangeditor/core/dist/core/src/editor/dom-editor.d.ts","./node_modules/@uppy/utils/types/index.d.ts","./node_modules/@uppy/core/types/index.d.ts","./node_modules/@wangeditor/core/dist/core/src/upload/interface.d.ts","./node_modules/@wangeditor/core/dist/core/src/upload/createuploader.d.ts","./node_modules/@wangeditor/core/dist/core/src/upload/index.d.ts","./node_modules/i18next/index.d.ts","./node_modules/@wangeditor/core/dist/core/src/i18n/index.d.ts","./node_modules/@wangeditor/core/dist/core/src/index.d.ts","./node_modules/@wangeditor/editor/dist/editor/src/boot.d.ts","./node_modules/@wangeditor/editor/dist/editor/src/utils/dom.d.ts","./node_modules/@wangeditor/editor/dist/editor/src/create.d.ts","./node_modules/@wangeditor/editor/dist/editor/src/index.d.ts","./node_modules/vuedraggable/src/vuedraggable.d.ts","./src/components/popup/index.vue","./src/components/material/file.vue","./src/hooks/usepaging.ts","./src/components/material/hook.ts","./src/components/material/preview.vue","./src/components/material/index.vue","./src/components/material/picker.vue","./src/components/editor/index.vue","./src/components/export-data/index.vue","./src/components/footer-btns/index.vue","./src/components/icon/index.ts","./src/components/icon/svg-icon.vue","./src/components/icon/index.vue","./src/components/icon/picker.vue","./src/components/image-contain/index.vue","./src/components/link/index.ts","./src/components/link/article-list.vue","./src/components/link/custom-link.vue","./src/components/link/mini-program.vue","./src/components/link/shop-pages.vue","./src/components/link/index.vue","./src/components/link/picker.vue","./src/components/overflow-tooltip/index.vue","./src/components/pagination/index.vue","./src/components/popover-input/index.vue","./src/components/upload/index.vue","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/const/call.d.ts","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/const/error.d.ts","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/const/log.d.ts","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/const/index.d.ts","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/interface/icallservice.d.ts","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/interface/icallstore.d.ts","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/interface/ituiglobal.d.ts","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/interface/ituistore.d.ts","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/interface/index.d.ts","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/callservice/uidesign.d.ts","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/callservice/index.d.ts","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/locales/index.d.ts","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/index.d.ts","./node_modules/@trtc/calls-uikit-vue/types/index.d.ts","./src/components/video-call/index.vue","./src/hooks/usedictoptions.ts","./node_modules/vue-clipboard3/dist/esm/index.d.ts","./src/install/directives/copy.ts","./src/install/directives/perms.ts","./node_modules/echarts/types/dist/shared.d.ts","./node_modules/echarts/types/dist/charts.d.ts","./node_modules/echarts/charts.d.ts","./node_modules/echarts/types/dist/components.d.ts","./node_modules/echarts/components.d.ts","./node_modules/echarts/types/dist/core.d.ts","./node_modules/echarts/core.d.ts","./node_modules/echarts/types/dist/features.d.ts","./node_modules/echarts/features.d.ts","./node_modules/echarts/types/dist/renderers.d.ts","./node_modules/echarts/renderers.d.ts","./src/install/plugins/echart.ts","./node_modules/element-plus/es/components/base/style/css.d.ts","./node_modules/element-plus/es/components/overlay/style/css.d.ts","./node_modules/element-plus/es/components/dialog/style/css.d.ts","./src/install/plugins/element.ts","./node_modules/@highlightjs/vue-plugin/dist/vue.d.ts","./node_modules/highlight.js/types/index.d.ts","./src/install/plugins/hljs.ts","./src/stores/index.ts","./src/install/plugins/pinia.ts","./src/router/guard/index.ts","./src/install/plugins/router.ts","./src/install/plugins/tuikit.ts","./src/router/guard/init.ts","./src/utils/checkhttps.ts","./src/utils/env.ts","./src/utils/getexposetype.ts","./src/views/app/recharge/index.vue","./src/views/article/column/edit.vue","./src/views/article/column/index.vue","./src/views/article/lists/edit.vue","./src/views/article/lists/index.vue","./src/views/channel/h5.vue","./src/views/channel/open_setting.vue","./src/views/channel/weapp.vue","./src/views/channel/wx_oa/config.vue","./src/views/channel/wx_oa/menu_com/usemenuoa.ts","./src/views/channel/wx_oa/menu_com/oa-menu-form.vue","./src/views/channel/wx_oa/menu_com/oa-menu-form-edit.vue","./src/views/channel/wx_oa/menu_com/oa-attr.vue","./src/views/channel/wx_oa/menu_com/oa-phone.vue","./src/views/channel/wx_oa/menu.vue","./src/views/channel/wx_oa/reply/edit.vue","./src/views/channel/wx_oa/reply/default_reply.vue","./src/views/channel/wx_oa/reply/follow_reply.vue","./src/views/channel/wx_oa/reply/keyword_reply.vue","./src/views/chat/components/messagebubble.vue","./src/views/chat/components/sendpanel.vue","./src/views/chat/index.vue","./src/views/consumer/assistant/edit.vue","./src/views/consumer/assistant/index.vue","./src/views/consumer/components/account-adjust.vue","./src/views/consumer/doctor/edit.vue","./src/views/consumer/doctor/index.vue","./src/views/consumer/doctor/paiban.vue","./src/views/consumer/lists/detail.vue","./src/views/consumer/lists/index.vue","./src/views/consumer/prescription/index.vue","./src/views/consumer/prescription/list.vue","./src/views/consumer/prescription/order_list.vue","./src/views/decoration/pc.vue","./src/views/decoration/component/pages/menu.vue","./src/views/decoration/component/tabbar/mobile/attr.vue","./src/views/decoration/component/decoration-img.vue","./src/views/decoration/component/tabbar/mobile/content.vue","./src/views/decoration/component/tabbar/mobile/index.ts","./src/views/decoration/tabbar.vue","./src/views/decoration/component/add-nav.vue","./src/views/decoration/component/pages/attr-setting.vue","./src/views/decoration/component/pages/preview.vue","./src/views/decoration/component/tabbar/pc/menu-set.vue","./src/views/decoration/component/tabbar/pc/attr.vue","./src/views/decoration/component/tabbar/pc/content.vue","./src/views/decoration/component/tabbar/pc/index.ts","./src/views/decoration/component/widgets/banner/options.ts","./src/views/decoration/component/widgets/banner/attr.vue","./src/views/decoration/component/widgets/banner/content.vue","./src/views/decoration/component/widgets/banner/index.ts","./src/views/decoration/component/widgets/customer-service/options.ts","./src/views/decoration/component/widgets/customer-service/attr.vue","./src/views/decoration/component/widgets/customer-service/content.vue","./src/views/decoration/component/widgets/customer-service/index.ts","./src/views/decoration/component/widgets/middle-banner/options.ts","./src/views/decoration/component/widgets/middle-banner/attr.vue","./src/views/decoration/component/widgets/middle-banner/content.vue","./src/views/decoration/component/widgets/middle-banner/index.ts","./src/views/decoration/component/widgets/my-service/options.ts","./src/views/decoration/component/widgets/my-service/attr.vue","./src/views/decoration/component/widgets/my-service/content.vue","./src/views/decoration/component/widgets/my-service/index.ts","./src/views/decoration/component/widgets/nav/options.ts","./src/views/decoration/component/widgets/nav/attr.vue","./src/views/decoration/component/widgets/nav/content.vue","./src/views/decoration/component/widgets/nav/index.ts","./src/views/decoration/component/widgets/news/options.ts","./src/views/decoration/component/widgets/news/attr.vue","./src/views/decoration/component/widgets/news/content.vue","./src/views/decoration/component/widgets/news/index.ts","./src/views/decoration/component/widgets/page-meta/options.ts","./src/views/decoration/component/widgets/page-meta/attr.vue","./src/views/decoration/component/widgets/page-meta/content.vue","./src/views/decoration/component/widgets/page-meta/index.ts","./src/views/decoration/component/widgets/pc-banner/options.ts","./src/views/decoration/component/widgets/pc-banner/content.vue","./src/views/decoration/component/widgets/pc-banner/index.ts","./src/views/decoration/component/widgets/search/options.ts","./src/views/decoration/component/widgets/search/attr.vue","./src/views/decoration/component/widgets/search/content.vue","./src/views/decoration/component/widgets/search/index.ts","./src/views/decoration/component/widgets/user-banner/options.ts","./src/views/decoration/component/widgets/user-banner/attr.vue","./src/views/decoration/component/widgets/user-banner/content.vue","./src/views/decoration/component/widgets/user-banner/index.ts","./src/views/decoration/component/widgets/user-info/options.ts","./src/views/decoration/component/widgets/user-info/attr.vue","./src/views/decoration/component/widgets/user-info/content.vue","./src/views/decoration/component/widgets/user-info/index.ts","./src/views/decoration/pages/index.vue","./src/views/decoration/style/components/theme-picker.vue","./src/views/decoration/style/components/mobile-style.vue","./src/views/decoration/style/style.vue","./src/views/dev_tools/components/relations-add.vue","./src/views/dev_tools/code/edit.vue","./src/views/dev_tools/components/code-preview.vue","./src/views/dev_tools/components/data-table.vue","./src/views/dev_tools/code/index.vue","./src/views/doctor/dept-tongji.vue","./src/views/doctor/medicine.vue","./src/views/doctor/roster.vue","./src/views/doctor/tongji.vue","./src/views/fans/index.vue","./src/views/fans/qywx.vue","./src/views/finance/balance_details.vue","./src/views/finance/recharge_record.vue","./src/views/finance/component/refund-log.vue","./src/views/finance/refund_record.vue","./src/views/finance/account_cost/edit.vue","./src/views/finance/account_cost/index.vue","./src/views/material/index.vue","./src/views/message/notice/edit.vue","./src/views/message/notice/index.vue","./src/views/message/short_letter/edit.vue","./src/views/message/short_letter/index.vue","./src/views/order/index.vue","./src/views/organization/department/edit.vue","./src/views/organization/department/index.vue","./src/views/organization/post/edit.vue","./src/views/organization/post/index.vue","./src/views/permission/admin/edit.vue","./src/views/permission/admin/index.vue","./src/views/permission/menu/edit.vue","./src/views/permission/menu/index.vue","./src/views/permission/role/auth.vue","./src/views/permission/role/edit.vue","./src/views/permission/role/index.vue","./src/views/setting/dict/data/edit.vue","./src/views/setting/dict/data/index.vue","./src/views/setting/dict/type/edit.vue","./src/views/setting/dict/type/index.vue","./src/views/setting/pay/config/edit.vue","./src/views/setting/pay/config/index.vue","./src/views/setting/pay/method/index.vue","./src/views/setting/search/index.vue","./src/views/setting/storage/edit.vue","./src/views/setting/storage/index.vue","./src/views/setting/system/cache.vue","./src/views/setting/system/environment.vue","./src/views/setting/system/journal.vue","./src/views/setting/system/scheduled_task/edit.vue","./src/views/setting/system/scheduled_task/index.vue","./src/views/setting/user/login_register.vue","./src/views/setting/user/setup.vue","./src/views/setting/website/filing.vue","./src/views/setting/website/information.vue","./src/views/setting/website/protocol.vue","./src/views/setting/website/statistics.vue","./node_modules/vue-echarts/node_modules/vue-demi/lib/index.d.ts","./node_modules/vue-echarts/dist/index.d.ts","./src/views/stats/conversion/index.vue","./src/views/tcm/appointment/list.vue","./src/views/tcm/appointment/components/prescription-drawer.vue","./src/views/tcm/diagnosis/add.vue","./node_modules/trtc-sdk-v5/plugins/cdn-streaming/cdn-streaming.esm.d.ts","./node_modules/trtc-sdk-v5/plugins/device-detector/device-detector.esm.d.ts","./node_modules/trtc-sdk-v5/plugins/video-effect/virtual-background/virtual-background.esm.d.ts","./node_modules/trtc-sdk-v5/plugins/video-effect/watermark/watermark.esm.d.ts","./node_modules/trtc-sdk-v5/plugins/video-effect/beauty/beauty.esm.d.ts","./node_modules/trtc-sdk-v5/plugins/video-effect/basic-beauty/basic-beauty.esm.d.ts","./node_modules/trtc-sdk-v5/plugins/cross-room/cross-room.esm.d.ts","./node_modules/trtc-sdk-v5/plugins/custom-encryption/custom-encryption.esm.d.ts","./node_modules/trtc-sdk-v5/plugins/video-effect/video-mixer/video-mixer.esm.d.ts","./node_modules/trtc-sdk-v5/plugins/small-stream-auto-switcher/small-stream-auto-switcher.esm.d.ts","./node_modules/trtc-sdk-v5/plugins/chorus/chorus.esm.d.ts","./node_modules/trtc-sdk-v5/plugins/lebplayer/lebplayer.esm.d.ts","./node_modules/trtc-sdk-v5/plugins/realtime-transcriber/realtime-transcriber.esm.d.ts","./node_modules/trtc-sdk-v5/index.d.ts","./src/views/tcm/diagnosis/components/assistantwatchcalldialog.vue","./src/views/tcm/diagnosis/index.vue","./src/views/tcm/follow/index.vue","./src/views/template/component/file.vue","./src/views/template/component/icon.vue","./src/views/template/component/link.vue","./src/views/template/component/overflow.vue","./src/views/template/component/popover_input.vue","./src/views/template/component/rich_text.vue","./src/views/template/component/upload.vue","./src/views/test/patient-call.vue","./src/views/workbench/index.vue","./components.d.ts","./auto-imports.d.ts","./typings/index.d.ts","./typings/router.d.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/web-globals/navigator.d.ts","./node_modules/@types/node/web-globals/storage.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/sqlite.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/@types/estree/index.d.ts","./node_modules/rollup/dist/rollup.d.ts","./node_modules/rollup/dist/parseast.d.ts","./node_modules/vite/dist/node/modulerunnertransport.d-dj_me5sf.d.ts","./node_modules/vite/dist/node/module-runner.d.ts","./node_modules/esbuild/lib/main.d.ts","./node_modules/source-map-js/source-map.d.ts","./node_modules/postcss/lib/previous-map.d.ts","./node_modules/postcss/lib/input.d.ts","./node_modules/postcss/lib/css-syntax-error.d.ts","./node_modules/postcss/lib/declaration.d.ts","./node_modules/postcss/lib/root.d.ts","./node_modules/postcss/lib/warning.d.ts","./node_modules/postcss/lib/lazy-result.d.ts","./node_modules/postcss/lib/no-work-result.d.ts","./node_modules/postcss/lib/processor.d.ts","./node_modules/postcss/lib/result.d.ts","./node_modules/postcss/lib/document.d.ts","./node_modules/postcss/lib/rule.d.ts","./node_modules/postcss/lib/node.d.ts","./node_modules/postcss/lib/comment.d.ts","./node_modules/postcss/lib/container.d.ts","./node_modules/postcss/lib/at-rule.d.ts","./node_modules/postcss/lib/list.d.ts","./node_modules/postcss/lib/postcss.d.ts","./node_modules/postcss/lib/postcss.d.mts","./node_modules/vite/types/internal/lightningcssoptions.d.ts","./node_modules/sass/types/deprecations.d.ts","./node_modules/sass/types/util/promise_or.d.ts","./node_modules/sass/types/importer.d.ts","./node_modules/sass/types/logger/source_location.d.ts","./node_modules/sass/types/logger/source_span.d.ts","./node_modules/sass/types/logger/index.d.ts","./node_modules/immutable/dist/immutable.d.ts","./node_modules/sass/types/value/boolean.d.ts","./node_modules/sass/types/value/calculation.d.ts","./node_modules/sass/types/value/color.d.ts","./node_modules/sass/types/value/function.d.ts","./node_modules/sass/types/value/list.d.ts","./node_modules/sass/types/value/map.d.ts","./node_modules/sass/types/value/mixin.d.ts","./node_modules/sass/types/value/number.d.ts","./node_modules/sass/types/value/string.d.ts","./node_modules/sass/types/value/argument_list.d.ts","./node_modules/sass/types/value/index.d.ts","./node_modules/sass/types/options.d.ts","./node_modules/sass/types/compile.d.ts","./node_modules/sass/types/exception.d.ts","./node_modules/sass/types/legacy/exception.d.ts","./node_modules/sass/types/legacy/plugin_this.d.ts","./node_modules/sass/types/legacy/function.d.ts","./node_modules/sass/types/legacy/importer.d.ts","./node_modules/sass/types/legacy/options.d.ts","./node_modules/sass/types/legacy/render.d.ts","./node_modules/sass/types/index.d.ts","./node_modules/vite/types/internal/csspreprocessoroptions.d.ts","./node_modules/vite/types/metadata.d.ts","./node_modules/vite/dist/node/index.d.ts","./node_modules/magic-string/dist/magic-string.es.d.mts","./node_modules/typescript/lib/typescript.d.ts","./node_modules/@vue/compiler-sfc/dist/compiler-sfc.d.ts","./node_modules/vue/compiler-sfc/index.d.mts","./node_modules/@vitejs/plugin-vue/dist/index.d.mts","./node_modules/@vue/babel-plugin-resolve-type/dist/index.d.mts","./node_modules/@vue/babel-plugin-jsx/dist/index.d.mts","./node_modules/@vitejs/plugin-vue-jsx/dist/index.d.mts","./node_modules/mlly/dist/index.d.ts","./node_modules/unimport/dist/shared/unimport.cavrr9sh.d.mts","./node_modules/unimport/dist/shared/unimport.czoa5cgj.d.mts","./node_modules/strip-literal/node_modules/js-tokens/index.d.ts","./node_modules/strip-literal/dist/index.d.mts","./node_modules/unimport/dist/index.d.mts","./node_modules/unplugin-utils/dist/index.d.ts","./node_modules/unplugin-auto-import/dist/types-bch7f5uk.d.ts","./node_modules/unplugin-auto-import/dist/vite.d.ts","./node_modules/webpack-virtual-modules/lib/index.d.ts","./node_modules/unplugin/dist/index.d.ts","./node_modules/unplugin-vue-components/dist/types-cfwifa2k.d.ts","./node_modules/unplugin-vue-components/dist/resolvers.d.ts","./node_modules/unplugin-vue-components/dist/vite.d.ts","./node_modules/vite-plugin-style-import/dist/index.d.ts","./node_modules/@types/svgo/index.d.ts","./node_modules/vite-plugin-svg-icons/dist/index.d.ts","./node_modules/vite-plugin-vue-setup-extend/dist/index.d.ts","./vite.config.ts"],"fileIdsList":[[103,107,113,2312,2315,2321,2369,2386,2387],[103,107,113,1104,1444,1520,1537,1950,1951,1952,1972,1973,1974,1975,1976,2058,2059,2062,2063,2064,2065,2066,2067,2069,2070,2071,2072,2074,2075,2076,2077,2078,2079,2080,2081,2082,2083,2098,2315,2321,2369,2386,2387],[92,2321,2369,2386,2387],[103,104,107,113,2312,2321,2369,2386,2387],[95,2321,2369,2386,2387],[2321,2369,2386,2387],[740,2321,2369,2386,2387],[741,2321,2369,2386,2387],[740,741,742,743,744,745,746,747,748,2321,2369,2386,2387],[103,107,113,2312,2321,2369,2386,2387],[1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,2321,2369,2386,2387],[1412,2321,2369,2386,2387],[632,2321,2369,2386,2387],[633,634,2321,2369,2386,2387],[524,2321,2369,2386,2387],[518,520,2321,2369,2386,2387],[508,518,519,521,522,523,2321,2369,2386,2387],[518,2321,2369,2386,2387],[508,518,2321,2369,2386,2387],[509,510,511,512,513,514,515,516,517,2321,2369,2386,2387],[509,513,514,517,518,521,2321,2369,2386,2387],[509,510,511,512,513,514,515,516,517,518,519,521,522,2321,2369,2386,2387],[508,509,510,511,512,513,514,515,516,517,2321,2369,2386,2387],[1592,2321,2369,2386,2387],[1969,2321,2369,2386,2387],[1960,1961,1965,1966,2321,2369,2386,2387],[1960,2321,2369,2386,2387],[1957,1958,1959,2321,2369,2386,2387],[1960,1967,1968,2321,2369,2386,2387],[1960,1965,2321,2369,2386,2387],[1961,1962,1963,1964,2321,2369,2386,2387],[1567,2321,2369,2386,2387],[1569,1570,2321,2369,2386,2387],[1568,1571,1890,1948,2321,2369,2386,2387],[1589,2321,2369,2386,2387],[103,107,113,1921,1922,2312,2321,2369,2386,2387],[103,107,113,1921,2312,2321,2369,2386,2387],[103,107,113,1904,2312,2321,2369,2386,2387],[103,107,113,1906,2312,2321,2369,2386,2387],[103,107,113,1906,1907,2312,2321,2369,2386,2387],[1904,2321,2369,2386,2387],[103,107,113,1909,2312,2321,2369,2386,2387],[103,107,113,1911,2312,2321,2369,2386,2387],[103,107,113,1911,1912,1913,2312,2321,2369,2386,2387],[1942,2321,2369,2386,2387],[1905,1908,1910,1914,1915,1920,1923,1925,1926,1927,1929,1930,1934,1936,1938,1941,1943,1944,2321,2369,2386,2387],[103,107,113,1924,2312,2321,2369,2386,2387],[1916,1917,2321,2369,2386,2387],[1918,1919,2321,2369,2386,2387],[1939,1940,2321,2369,2386,2387],[103,107,113,1939,2312,2321,2369,2386,2387],[1931,1932,1933,2321,2369,2386,2387],[103,107,113,1931,2312,2321,2369,2386,2387],[103,107,113,1928,2312,2321,2369,2386,2387],[103,107,113,1935,2312,2321,2369,2386,2387],[103,107,113,1937,2312,2321,2369,2386,2387],[103,107,113,1946,2312,2321,2369,2386,2387],[1897,1903,1945,1947,2321,2369,2386,2387],[1898,1899,2321,2369,2386,2387],[103,107,113,1898,2312,2321,2369,2386,2387],[103,107,113,1896,1897,2312,2321,2369,2386,2387],[103,107,113,1891,1900,2312,2321,2369,2386,2387],[103,107,113,1891,1896,2312,2321,2369,2386,2387],[1896,2321,2369,2386,2387],[1901,1902,2321,2369,2386,2387],[1892,1893,1894,1895,2321,2369,2386,2387],[1892,1893,1894,2321,2369,2386,2387],[1892,2321,2369,2386,2387],[1892,1893,2321,2369,2386,2387],[1700,1710,1778,2321,2369,2386,2387],[1707,1708,1709,1710,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1701,1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1701,1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,2321,2369,2386,2387],[1701,1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1701,1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1701,1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1701,1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1701,1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1701,1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1701,1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1700,1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1701,1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1701,1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1701,1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1701,1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1701,1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1701,1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1701,1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1701,1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1766,1767,1768,1867,2321,2369,2386,2387],[1701,1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1767,1768,1867,2321,2369,2386,2387],[1701,1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1768,1867,2321,2369,2386,2387],[1701,1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1867,2321,2369,2386,2387],[1700,1701,1702,1703,1710,1711,1712,1777,2321,2369,2386,2387],[1700,1705,1706,1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1778,1867,2321,2369,2386,2387],[1700,1701,1702,1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1778,1867,2321,2369,2386,2387],[1709,2321,2369,2386,2387],[1709,1769,2321,2369,2386,2387],[1700,1709,2321,2369,2386,2387],[1713,1770,1771,1772,1773,1774,1775,1776,2321,2369,2386,2387],[1700,1701,1704,2321,2369,2386,2387],[1700,2321,2369,2386,2387],[1701,1710,2321,2369,2386,2387],[1701,2321,2369,2386,2387],[1696,1700,1710,2321,2369,2386,2387],[1710,2321,2369,2386,2387],[1700,1701,2321,2369,2386,2387],[1704,1710,2321,2369,2386,2387],[1701,1710,1778,2321,2369,2386,2387],[1701,1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2321,2369,2386,2387],[1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,2321,2369,2386,2387],[1702,2321,2369,2386,2387],[1700,1701,1710,2321,2369,2386,2387],[1707,1708,1709,1710,2321,2369,2386,2387],[1705,1706,1707,1708,1709,1710,1712,1777,1778,1779,1831,1837,1838,1842,1843,1866,2321,2369,2386,2387],[1832,1833,1834,1835,1836,2321,2369,2386,2387],[1701,1705,1710,2321,2369,2386,2387],[1705,2321,2369,2386,2387],[1701,1705,1710,1778,2321,2369,2386,2387],[1700,1701,1705,1706,1707,1708,1709,1710,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1778,1867,2321,2369,2386,2387],[1702,1710,1778,2321,2369,2386,2387],[1839,1840,1841,2321,2369,2386,2387],[1701,1706,1710,2321,2369,2386,2387],[1706,2321,2369,2386,2387],[1700,1701,1702,1704,1707,1708,1709,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1778,1867,2321,2369,2386,2387],[1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,2321,2369,2386,2387],[1700,1702,1707,1708,1709,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,1868,2321,2369,2386,2387],[1707,1708,1709,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,1869,2321,2369,2386,2387],[1869,1870,2321,2369,2386,2387],[1707,1708,1709,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,1875,2321,2369,2386,2387],[1875,1876,2321,2369,2386,2387],[1696,2321,2369,2386,2387],[1699,2321,2369,2386,2387],[1697,2321,2369,2386,2387],[1698,2321,2369,2386,2387],[103,107,113,1698,1699,1707,1708,1709,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,1868,1871,2312,2321,2369,2386,2387],[103,107,113,1700,1707,1708,1709,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2312,2321,2369,2386,2387],[103,107,113,1873,2312,2321,2369,2386,2387],[103,107,113,1698,1699,1707,1708,1709,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,1868,1877,2312,2321,2369,2386,2387],[1707,1708,1709,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,1872,1873,1874,1878,1879,1880,1881,1882,1883,2321,2369,2386,2387],[103,107,113,1707,1708,1709,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,1873,2312,2321,2369,2386,2387],[103,107,113,1701,1702,1707,1708,1709,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1867,2312,2321,2369,2386,2387],[2096,2321,2369,2386,2387],[2087,2088,2092,2093,2321,2369,2386,2387],[2087,2321,2369,2386,2387],[2084,2085,2086,2321,2369,2386,2387],[2087,2094,2095,2321,2369,2386,2387],[2087,2092,2321,2369,2386,2387],[2088,2089,2090,2091,2321,2369,2386,2387],[127,2321,2369,2386,2387],[179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,2321,2369,2386,2387],[115,117,118,119,120,121,122,123,124,125,126,127,2321,2369,2386,2387],[115,116,118,119,120,121,122,123,124,125,126,127,2321,2369,2386,2387],[116,117,118,119,120,121,122,123,124,125,126,127,2321,2369,2386,2387],[115,116,117,119,120,121,122,123,124,125,126,127,2321,2369,2386,2387],[115,116,117,118,120,121,122,123,124,125,126,127,2321,2369,2386,2387],[115,116,117,118,119,121,122,123,124,125,126,127,2321,2369,2386,2387],[115,116,117,118,119,120,122,123,124,125,126,127,2321,2369,2386,2387],[115,116,117,118,119,120,121,123,124,125,126,127,2321,2369,2386,2387],[115,116,117,118,119,120,121,122,124,125,126,127,2321,2369,2386,2387],[115,116,117,118,119,120,121,122,123,125,126,127,2321,2369,2386,2387],[115,116,117,118,119,120,121,122,123,124,126,127,2321,2369,2386,2387],[115,116,117,118,119,120,121,122,123,124,125,127,2321,2369,2386,2387],[115,116,117,118,119,120,121,122,123,124,125,126,2321,2369,2386,2387],[2321,2366,2367,2369,2386,2387],[2321,2368,2369,2386,2387],[2369,2386,2387],[2321,2369,2374,2386,2387,2404],[2321,2369,2370,2375,2380,2386,2387,2389,2401,2412],[2321,2369,2370,2371,2380,2386,2387,2389],[2316,2317,2318,2321,2369,2386,2387],[2321,2369,2372,2386,2387,2413],[2321,2369,2373,2374,2381,2386,2387,2390],[2321,2369,2374,2386,2387,2401,2409],[2321,2369,2375,2377,2380,2386,2387,2389],[2321,2368,2369,2376,2386,2387],[2321,2369,2377,2378,2386,2387],[2321,2369,2379,2380,2386,2387],[2321,2368,2369,2380,2386,2387],[2321,2369,2380,2381,2382,2386,2387,2401,2412],[2321,2369,2380,2381,2382,2386,2387,2396,2401,2404],[2321,2362,2369,2377,2380,2383,2386,2387,2389,2401,2412],[2321,2369,2380,2381,2383,2384,2386,2387,2389,2401,2409,2412],[2321,2369,2383,2385,2386,2387,2401,2409,2412],[2319,2320,2321,2322,2323,2324,2325,2363,2364,2365,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2392,2393,2394,2395,2396,2397,2398,2399,2400,2401,2402,2403,2404,2405,2406,2407,2408,2409,2410,2411,2412,2413,2414,2415,2416,2417,2418],[2321,2369,2380,2386,2387],[2321,2369,2386,2387,2388,2412],[2321,2369,2377,2380,2386,2387,2389,2401],[2321,2369,2386,2387,2390],[2321,2369,2386,2387,2391],[2321,2368,2369,2386,2387,2392],[2321,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2392,2393,2394,2395,2396,2397,2398,2399,2400,2401,2402,2403,2404,2405,2406,2407,2408,2409,2410,2411,2412,2413,2414,2415,2416,2417,2418],[2321,2369,2386,2387,2394],[2321,2369,2386,2387,2395],[2321,2369,2380,2386,2387,2396,2397],[2321,2369,2386,2387,2396,2398,2413,2415],[2321,2369,2381,2386,2387],[2321,2369,2380,2386,2387,2401,2402,2404],[2321,2369,2386,2387,2403,2404],[2321,2369,2386,2387,2401,2402],[2321,2369,2386,2387,2404],[2321,2369,2386,2387,2405],[2321,2366,2369,2386,2387,2401,2406,2412],[2321,2369,2380,2386,2387,2407,2408],[2321,2369,2386,2387,2407,2408],[2321,2369,2374,2386,2387,2389,2401,2409],[2321,2369,2386,2387,2410],[2321,2369,2386,2387,2389,2411],[2321,2369,2383,2386,2387,2395,2412],[2321,2369,2374,2386,2387,2413],[2321,2369,2386,2387,2401,2414],[2321,2369,2386,2387,2388,2415],[2321,2369,2386,2387,2416],[2321,2362,2369,2386,2387],[2321,2362,2369,2380,2382,2386,2387,2392,2401,2404,2412,2414,2415,2417],[2321,2369,2386,2387,2401,2418],[2321,2369,2386,2387,2419],[2045,2321,2369,2386,2387],[2321,2369,2386,2387,2477,2484],[2321,2369,2386,2387,2477,2481],[95,2321,2369,2386,2387,2483],[2321,2369,2386,2387,2480],[94,95,96,2321,2369,2386,2387],[97,2321,2369,2386,2387],[95,96,97,2321,2369,2386,2387,2445,2478,2479],[94,2321,2369,2386,2387],[94,99,100,102,2321,2369,2386,2387],[99,100,101,102,2321,2369,2386,2387],[103,107,108,113,2312,2321,2369,2386,2387],[2001,2023,2025,2321,2369,2386,2387],[2001,2022,2024,2025,2037,2321,2369,2386,2387],[2022,2024,2025,2029,2321,2369,2386,2387],[2038,2039,2321,2369,2386,2387],[2001,2022,2025,2029,2041,2042,2043,2321,2369,2386,2387],[2001,2020,2022,2023,2024,2321,2369,2386,2387],[2050,2321,2369,2386,2387],[92,2024,2025,2026,2027,2028,2033,2040,2044,2049,2051,2321,2369,2386,2387],[2023,2321,2369,2386,2387],[2022,2023,2024,2321,2369,2386,2387],[2023,2029,2030,2032,2321,2369,2386,2387],[2001,2022,2025,2321,2369,2386,2387],[2022,2025,2321,2369,2386,2387],[2022,2023,2025,2031,2321,2369,2386,2387],[2001,2019,2025,2321,2369,2386,2387],[2022,2321,2369,2386,2387],[2001,2025,2321,2369,2386,2387],[2046,2047,2321,2369,2386,2387],[2047,2048,2321,2369,2386,2387],[2046,2321,2369,2386,2387],[2021,2321,2369,2386,2387],[2052,2321,2369,2386,2387],[2001,2052,2054,2321,2369,2386,2387],[92,1979,1980,1981,2001,2052,2053,2055,2321,2369,2386,2387],[833,2321,2369,2386,2387],[686,2321,2369,2386,2387],[685,2321,2369,2386,2387],[687,2321,2369,2386,2387],[2104,2321,2369,2386,2387],[2106,2321,2369,2386,2387],[2108,2321,2369,2386,2387],[2110,2321,2369,2386,2387],[1432,2321,2369,2386,2387],[2112,2321,2369,2386,2387],[2103,2321,2369,2386,2387],[500,501,502,2321,2369,2386,2387],[101,103,107,113,500,502,2312,2321,2369,2386,2387],[101,103,107,113,501,2312,2321,2369,2386,2387],[500,504,505,506,2321,2369,2386,2387],[103,107,113,500,2312,2321,2369,2386,2387],[103,107,113,500,504,2312,2321,2369,2386,2387],[505,2321,2369,2386,2387],[500,1058,1059,1061,2321,2369,2386,2387],[103,107,113,1060,2312,2321,2369,2386,2387],[103,107,113,500,1059,2312,2321,2369,2386,2387],[103,107,113,1058,2312,2321,2369,2386,2387],[500,652,653,2321,2369,2386,2387],[103,107,113,500,535,539,651,653,2312,2321,2369,2386,2387],[103,107,113,500,539,651,652,2312,2321,2369,2386,2387],[500,655,656,657,658,659,660,2321,2369,2386,2387],[103,107,113,500,535,2312,2321,2369,2386,2387],[103,104,107,113,500,1104,2312,2321,2369,2386,2387],[101,103,107,113,174,500,2312,2321,2369,2386,2387],[101,103,107,113,655,2312,2321,2369,2386,2387],[103,107,113,655,2312,2321,2369,2386,2387],[656,657,2321,2369,2386,2387],[500,662,663,664,2321,2369,2386,2387],[103,107,113,662,2312,2321,2369,2386,2387],[663,2321,2369,2386,2387],[500,666,667,668,2321,2369,2386,2387],[103,107,113,666,2312,2321,2369,2386,2387],[667,2321,2369,2386,2387],[500,670,671,672,673,674,675,2321,2369,2386,2387],[103,107,113,500,2312,2315,2321,2369,2386,2387],[103,107,113,672,2312,2315,2321,2369,2386,2387],[103,107,113,670,2312,2321,2369,2386,2387],[671,673,2321,2369,2386,2387],[500,677,678,680,681,682,2321,2369,2386,2387],[103,107,113,500,677,2312,2321,2369,2386,2387],[103,107,113,679,2312,2321,2369,2386,2387],[103,107,113,174,500,2312,2321,2369,2386,2387],[103,107,113,677,2312,2321,2369,2386,2387],[678,680,2321,2369,2386,2387],[500,684,688,691,2321,2369,2386,2387],[103,107,113,684,687,2312,2321,2369,2386,2387],[103,107,113,500,687,2312,2321,2369,2386,2387],[103,107,113,687,689,2312,2321,2369,2386,2387],[688,690,2321,2369,2386,2387],[500,693,694,695,2321,2369,2386,2387],[103,107,113,693,2312,2321,2369,2386,2387],[694,2321,2369,2386,2387],[500,697,698,699,700,701,702,2321,2369,2386,2387],[103,107,113,699,2312,2321,2369,2386,2387],[103,107,113,697,2312,2321,2369,2386,2387],[698,700,2321,2369,2386,2387],[500,704,707,708,709,2321,2369,2386,2387],[103,107,113,500,704,2312,2321,2369,2386,2387],[103,107,113,704,705,707,708,2312,2321,2369,2386,2387],[706,709,2321,2369,2386,2387],[103,107,113,704,2312,2321,2369,2386,2387],[704,2321,2369,2386,2387],[103,107,113,500,705,2312,2321,2369,2386,2387],[500,714,715,716,2321,2369,2386,2387],[103,107,113,174,500,535,644,710,713,2312,2321,2369,2386,2387],[103,107,113,500,535,710,714,2312,2321,2369,2386,2387],[715,2321,2369,2386,2387],[500,718,719,2321,2369,2386,2387],[103,107,113,500,719,2312,2321,2369,2386,2387],[103,107,113,718,2312,2321,2369,2386,2387],[500,721,722,723,724,725,726,2321,2369,2386,2387],[103,107,113,721,2312,2321,2369,2386,2387],[103,107,113,174,500,644,721,725,2312,2321,2369,2386,2387],[103,107,113,724,1104,2312,2321,2369,2386,2387],[103,107,113,174,500,644,722,2312,2321,2369,2386,2387],[103,107,113,724,2312,2321,2369,2386,2387],[500,728,729,2321,2369,2386,2387],[103,107,113,500,729,2312,2321,2369,2386,2387],[103,107,113,728,2312,2321,2369,2386,2387],[500,738,2321,2369,2386,2387],[500,731,732,733,734,735,736,2321,2369,2386,2387],[103,107,113,500,731,2312,2321,2369,2386,2387],[103,107,113,500,733,2312,2321,2369,2386,2387],[103,107,113,731,2312,2321,2369,2386,2387],[732,734,2321,2369,2386,2387],[500,751,752,2321,2369,2386,2387],[103,107,113,500,749,750,752,2312,2321,2369,2386,2387],[103,107,113,539,750,751,2312,2321,2369,2386,2387],[749,2321,2369,2386,2387],[500,754,755,2321,2369,2386,2387],[103,107,113,174,500,644,651,749,755,2312,2321,2369,2386,2387],[103,107,113,750,754,2312,2321,2369,2386,2387],[500,780,781,782,783,2321,2369,2386,2387],[103,107,113,500,611,683,696,759,765,768,779,2312,2321,2369,2386,2387],[103,107,113,500,611,759,780,1104,2312,2321,2369,2386,2387],[103,107,113,780,2312,2321,2369,2386,2387],[103,107,113,487,644,782,1104,2312,2321,2369,2386,2387],[500,785,786,787,788,789,2321,2369,2386,2387],[500,791,792,2321,2369,2386,2387],[103,107,113,500,687,792,2312,2321,2369,2386,2387],[103,107,113,687,791,2312,2321,2369,2386,2387],[500,802,803,804,805,806,2321,2369,2386,2387],[103,107,113,644,2312,2321,2369,2386,2387],[103,104,107,113,500,801,1104,2312,2321,2369,2386,2387],[802,2321,2369,2386,2387],[103,107,113,500,801,804,2312,2321,2369,2386,2387],[500,808,809,810,2321,2369,2386,2387],[103,104,107,113,500,801,807,1104,2312,2321,2369,2386,2387],[808,2321,2369,2386,2387],[103,107,113,500,801,804,1104,2312,2321,2369,2386,2387],[500,812,813,814,2321,2369,2386,2387],[103,107,113,174,500,813,2312,2321,2369,2386,2387],[103,107,113,812,2312,2321,2369,2386,2387],[500,761,762,763,764,2321,2369,2386,2387],[103,107,113,500,760,762,2312,2321,2369,2386,2387],[103,107,113,761,2312,2321,2369,2386,2387],[92,2115,2116,2321,2369,2386,2387],[500,816,817,2321,2369,2386,2387],[103,107,113,500,817,2312,2321,2369,2386,2387],[103,107,113,816,2312,2321,2369,2386,2387],[500,819,820,2321,2369,2386,2387],[103,107,113,500,765,820,2312,2321,2369,2386,2387],[103,107,113,765,819,2312,2321,2369,2386,2387],[500,822,823,824,825,826,827,2321,2369,2386,2387],[103,107,113,500,525,535,683,2312,2321,2369,2386,2387],[103,107,113,500,644,651,683,1104,2312,2321,2369,2386,2387],[822,2321,2369,2386,2387],[103,107,113,535,2312,2321,2369,2386,2387],[500,829,830,831,2321,2369,2386,2387],[103,107,113,829,2312,2321,2369,2386,2387],[830,2321,2369,2386,2387],[500,836,837,838,839,840,841,844,2321,2369,2386,2387],[103,107,113,836,2312,2321,2369,2386,2387],[103,107,113,174,500,836,2312,2321,2369,2386,2387],[103,107,113,836,837,2312,2321,2369,2386,2387],[103,107,113,174,500,836,837,2312,2321,2369,2386,2387],[103,107,113,500,836,837,838,2312,2321,2369,2386,2387],[842,843,2321,2369,2386,2387],[103,107,113,174,487,2312,2321,2369,2386,2387],[103,107,113,174,487,500,834,835,837,838,2312,2321,2369,2386,2387],[103,107,113,500,836,837,2312,2321,2369,2386,2387],[500,846,847,2321,2369,2386,2387],[103,107,113,500,847,2312,2321,2369,2386,2387],[103,107,113,846,2312,2321,2369,2386,2387],[500,850,851,2321,2369,2386,2387],[103,107,113,500,851,2312,2321,2369,2386,2387],[103,107,113,850,2312,2321,2369,2386,2387],[500,849,853,2321,2369,2386,2387],[103,107,113,500,853,2312,2321,2369,2386,2387],[103,107,113,849,852,2312,2321,2369,2386,2387],[503,507,535,539,651,654,661,665,669,676,683,692,696,703,710,713,717,720,727,730,737,739,753,756,759,765,768,779,784,790,793,801,807,811,815,818,821,828,832,845,848,852,854,857,861,871,873,876,879,882,885,893,896,899,903,910,922,935,936,941,946,950,953,959,962,995,1003,1006,1009,1014,1019,1028,1031,1036,1047,1050,1057,1062,1066,1071,1077,1079,1084,1087,1090,1094,2321,2369,2386,2387],[103,107,113,500,1078,2312,2321,2369,2386,2387],[500,855,856,2321,2369,2386,2387],[103,107,113,174,500,856,2312,2321,2369,2386,2387],[103,107,113,855,2312,2321,2369,2386,2387],[500,858,859,860,2321,2369,2386,2387],[103,107,113,174,500,535,713,2312,2321,2369,2386,2387],[103,107,113,500,858,1104,2312,2321,2369,2386,2387],[859,2321,2369,2386,2387],[500,536,537,538,2321,2369,2386,2387],[103,107,113,500,536,2312,2321,2369,2386,2387],[537,2321,2369,2386,2387],[500,766,767,2321,2369,2386,2387],[103,107,113,500,767,2312,2321,2369,2386,2387],[103,107,113,766,2312,2321,2369,2386,2387],[103,107,113,1080,1081,1082,1083,2312,2321,2369,2386,2387],[103,107,113,1080,1081,2312,2321,2369,2386,2387],[103,107,113,1080,2312,2321,2369,2386,2387],[103,107,113,487,2312,2321,2369,2386,2387],[500,1069,1070,2321,2369,2386,2387],[1067,2321,2369,2386,2387],[103,107,113,500,535,539,651,1067,1068,1070,2312,2321,2369,2386,2387],[103,107,113,500,525,539,651,1067,1068,1069,2312,2321,2369,2386,2387],[500,862,863,864,865,866,867,868,869,870,2321,2369,2386,2387],[863,865,866,867,2321,2369,2386,2387],[103,107,113,500,862,2312,2315,2321,2369,2386,2387],[103,107,113,862,864,2312,2321,2369,2386,2387],[103,107,113,500,535,862,2312,2315,2321,2369,2386,2387],[103,107,113,863,2312,2315,2321,2369,2386,2387],[500,1085,1086,2321,2369,2386,2387],[103,107,113,174,536,683,2312,2321,2369,2386,2387],[1085,2321,2369,2386,2387],[500,758,2321,2369,2386,2387],[103,107,113,500,757,2312,2321,2369,2386,2387],[103,107,113,500,758,2312,2321,2369,2386,2387],[500,1089,2321,2369,2386,2387],[103,107,113,500,1088,2312,2321,2369,2386,2387],[103,107,113,500,1089,2312,2321,2369,2386,2387],[101,103,107,113,500,872,2312,2321,2369,2386,2387],[101,103,107,113,500,2312,2321,2369,2386,2387],[92,2115,2321,2369,2386,2387],[500,874,875,2321,2369,2386,2387],[103,107,113,500,875,2312,2321,2369,2386,2387],[103,107,113,500,874,2312,2321,2369,2386,2387],[500,877,878,2321,2369,2386,2387],[500,880,881,2321,2369,2386,2387],[103,107,113,500,651,683,881,1104,2312,2321,2369,2386,2387],[103,107,113,500,683,880,1104,2312,2321,2369,2386,2387],[500,1091,1092,1093,2321,2369,2386,2387],[103,107,113,500,525,535,651,1092,2312,2321,2369,2386,2387],[103,107,113,500,651,1091,1104,2312,2321,2369,2386,2387],[500,525,526,527,528,529,530,531,532,533,534,2321,2369,2386,2387],[103,107,113,500,529,2312,2321,2369,2386,2387],[103,107,113,525,2312,2321,2369,2386,2387],[103,107,113,500,525,526,527,532,534,2312,2321,2369,2386,2387],[103,107,113,525,533,1104,2312,2321,2369,2386,2387],[103,107,113,500,528,2312,2321,2369,2386,2387],[103,107,113,526,527,2312,2321,2369,2386,2387],[103,107,113,526,531,2312,2321,2369,2386,2387],[103,107,113,526,530,2312,2321,2369,2386,2387],[500,883,884,2321,2369,2386,2387],[103,107,113,500,884,2312,2321,2369,2386,2387],[103,107,113,883,2312,2321,2369,2386,2387],[500,886,887,888,889,890,891,892,2321,2369,2386,2387],[103,107,113,890,2312,2321,2369,2386,2387],[103,107,113,500,886,889,2312,2321,2369,2386,2387],[103,107,113,888,2312,2321,2369,2386,2387],[103,107,113,174,500,891,2312,2321,2369,2386,2387],[103,107,113,174,500,887,2312,2321,2369,2386,2387],[103,107,113,886,2312,2321,2369,2386,2387],[500,894,895,2321,2369,2386,2387],[103,107,113,174,500,895,2312,2321,2369,2386,2387],[103,107,113,500,894,2312,2321,2369,2386,2387],[500,897,898,2321,2369,2386,2387],[103,107,113,500,898,2312,2321,2369,2386,2387],[103,107,113,897,2312,2321,2369,2386,2387],[500,900,901,902,2321,2369,2386,2387],[103,107,113,500,901,2312,2321,2369,2386,2387],[103,107,113,900,2312,2321,2369,2386,2387],[500,904,905,907,908,909,2321,2369,2386,2387],[103,107,113,500,905,2312,2321,2369,2386,2387],[103,107,113,904,2312,2321,2369,2386,2387],[103,107,113,906,2312,2321,2369,2386,2387],[103,107,113,907,2312,2321,2369,2386,2387],[103,107,113,1063,1065,1104,2312,2321,2369,2386,2387],[103,107,113,174,500,1063,1064,2312,2321,2369,2386,2387],[103,107,113,1063,1065,2312,2321,2369,2386,2387],[500,924,926,2321,2369,2386,2387],[103,107,113,160,500,535,911,924,927,2312,2321,2369,2386,2387],[103,104,107,113,911,922,2312,2321,2369,2386,2387],[103,107,113,486,500,651,911,923,925,927,1104,2312,2321,2369,2386,2387],[103,107,113,651,911,925,2312,2321,2369,2386,2387],[103,107,113,911,926,2312,2321,2369,2386,2387],[500,928,930,931,932,933,934,2321,2369,2386,2387],[103,107,113,500,930,2312,2321,2369,2386,2387],[103,107,113,500,535,927,931,2312,2321,2369,2386,2387],[103,107,113,486,500,651,910,911,927,928,930,1104,2312,2321,2369,2386,2387],[103,107,113,930,2312,2321,2369,2386,2387],[103,107,113,928,929,2312,2321,2369,2386,2387],[500,937,938,939,940,2321,2369,2386,2387],[103,107,113,500,940,2312,2321,2369,2386,2387],[103,107,113,939,2312,2321,2369,2386,2387],[103,107,113,500,644,938,2312,2321,2369,2386,2387],[103,107,113,937,2312,2321,2369,2386,2387],[500,942,944,945,2321,2369,2386,2387],[103,107,113,944,2312,2321,2369,2386,2387],[103,107,113,500,525,942,943,2312,2321,2369,2386,2387],[103,107,113,500,1104,2312,2321,2369,2386,2387],[500,947,948,949,2321,2369,2386,2387],[103,107,113,500,947,2312,2321,2369,2386,2387],[500,1073,1074,1075,1076,2321,2369,2386,2387],[103,107,113,500,1076,2312,2321,2369,2386,2387],[103,107,113,1075,2312,2321,2369,2386,2387],[103,107,113,500,1072,1074,2312,2321,2369,2386,2387],[103,107,113,1072,1073,2312,2321,2369,2386,2387],[500,951,952,2321,2369,2386,2387],[103,107,113,500,687,952,2312,2321,2369,2386,2387],[103,107,113,687,951,2312,2321,2369,2386,2387],[500,954,955,956,957,958,2321,2369,2386,2387],[103,107,113,500,957,2312,2321,2369,2386,2387],[103,107,113,500,954,956,2312,2321,2369,2386,2387],[103,107,113,500,955,2312,2321,2369,2386,2387],[103,107,113,954,2312,2321,2369,2386,2387],[500,960,961,2321,2369,2386,2387],[103,107,113,174,500,961,2312,2321,2369,2386,2387],[103,107,113,960,2312,2321,2369,2386,2387],[500,963,964,966,968,971,972,973,974,994,2321,2369,2386,2387],[103,107,113,500,965,2312,2321,2369,2386,2387],[103,107,113,964,2312,2321,2369,2386,2387],[103,107,113,975,2312,2321,2369,2386,2387],[103,104,107,113,984,2312,2321,2369,2386,2387],[103,107,113,977,2312,2321,2369,2386,2387],[103,104,107,113,964,965,979,2312,2321,2369,2386,2387],[103,104,107,113,500,965,981,982,2312,2321,2369,2386,2387],[976,978,980,983,984,985,986,2321,2369,2386,2387],[103,104,107,113,500,964,965,966,2312,2321,2369,2386,2387],[103,107,113,963,2312,2321,2369,2386,2387],[970,982,988,989,990,991,2321,2369,2386,2387],[103,107,113,973,2312,2321,2369,2386,2387],[103,107,113,964,968,2312,2321,2369,2386,2387],[103,107,113,964,968,988,2312,2321,2369,2386,2387],[103,107,113,644,964,966,967,968,969,2312,2321,2369,2386,2387],[103,107,113,922,968,969,2312,2321,2369,2386,2387],[103,107,113,968,982,2312,2321,2369,2386,2387],[103,107,113,500,922,964,965,2312,2321,2369,2386,2387],[103,107,113,965,2312,2321,2369,2386,2387],[103,107,113,964,965,2312,2321,2369,2386,2387],[103,107,113,644,968,987,993,2312,2321,2369,2386,2387],[103,107,113,500,964,965,2312,2321,2369,2386,2387],[103,104,107,113,500,922,964,965,967,2312,2321,2369,2386,2387],[103,104,107,113,500,964,965,967,968,970,1104,2312,2321,2369,2386,2387],[103,107,113,500,963,964,965,966,967,2312,2321,2369,2386,2387],[103,107,113,174,963,2312,2321,2369,2386,2387],[103,107,113,964,967,968,969,992,1104,2312,2321,2369,2386,2387],[500,772,776,778,2321,2369,2386,2387],[103,107,113,644,769,772,773,2312,2321,2369,2386,2387],[103,107,113,770,772,2312,2321,2369,2386,2387],[103,107,113,770,771,772,2312,2321,2369,2386,2387],[103,107,113,772,773,1104,2312,2321,2369,2386,2387],[103,107,113,612,770,772,773,775,2312,2321,2369,2386,2387],[103,107,113,770,772,773,774,2312,2321,2369,2386,2387],[103,107,113,127,500,644,769,770,772,773,775,1104,2312,2321,2369,2386,2387],[103,107,113,174,500,770,771,773,775,2312,2321,2369,2386,2387],[777,2321,2369,2386,2387],[103,107,113,651,772,773,2312,2321,2369,2386,2387],[500,996,997,998,1000,1001,1002,2321,2369,2386,2387],[103,107,113,997,1001,1002,2312,2321,2369,2386,2387],[103,107,113,500,998,999,2312,2321,2369,2386,2387],[103,107,113,998,1000,2312,2321,2369,2386,2387],[103,104,107,113,500,998,1000,2312,2321,2369,2386,2387],[103,107,113,500,996,2312,2321,2369,2386,2387],[103,107,113,997,2312,2321,2369,2386,2387],[103,104,107,113,500,998,1001,2312,2321,2369,2386,2387],[500,711,712,2321,2369,2386,2387],[103,107,113,174,500,712,2312,2321,2369,2386,2387],[103,107,113,711,2312,2321,2369,2386,2387],[500,1004,1005,2321,2369,2386,2387],[103,107,113,1004,1104,2312,2321,2369,2386,2387],[500,794,795,796,797,798,800,2321,2369,2386,2387],[103,107,113,500,525,687,794,2312,2321,2369,2386,2387],[103,107,113,500,525,535,687,2312,2321,2369,2386,2387],[103,107,113,687,794,2312,2321,2369,2386,2387],[103,107,113,799,2312,2321,2369,2386,2387],[103,104,107,113,500,794,1104,2312,2321,2369,2386,2387],[687,794,2321,2369,2386,2387],[500,1007,1008,2321,2369,2386,2387],[103,107,113,174,500,535,644,1008,2312,2321,2369,2386,2387],[103,107,113,500,1007,1104,2312,2321,2369,2386,2387],[500,1010,1011,1012,1013,2321,2369,2386,2387],[103,107,113,500,1012,2312,2321,2369,2386,2387],[103,107,113,1011,2312,2321,2369,2386,2387],[103,107,113,1010,2312,2321,2369,2386,2387],[500,646,647,648,649,650,2321,2369,2386,2387],[103,107,113,500,647,2312,2321,2369,2386,2387],[103,107,113,500,535,644,645,2312,2321,2369,2386,2387],[103,107,113,535,646,2312,2321,2369,2386,2387],[103,107,113,500,535,644,646,647,649,2312,2321,2369,2386,2387],[103,107,113,500,535,646,647,648,2312,2321,2369,2386,2387],[500,1051,1052,1053,1054,1055,1056,2321,2369,2386,2387],[103,107,113,500,635,2312,2321,2369,2386,2387],[103,107,113,500,632,1051,1052,2312,2321,2369,2386,2387],[103,107,113,632,1052,1055,2312,2321,2369,2386,2387],[103,107,113,500,632,1051,1052,1054,2312,2321,2369,2386,2387],[103,107,113,632,1053,1104,2312,2321,2369,2386,2387],[103,107,113,683,2312,2321,2369,2386,2387],[500,1015,1018,2321,2369,2386,2387],[103,107,113,500,1015,1016,2312,2321,2369,2386,2387],[103,107,113,500,1017,1104,2312,2321,2369,2386,2387],[103,107,113,500,1018,2312,2321,2369,2386,2387],[103,107,113,1015,1017,2312,2321,2369,2386,2387],[500,1029,1030,2321,2369,2386,2387],[935,1028,2321,2369,2386,2387],[103,107,113,500,935,1028,1104,2312,2321,2369,2386,2387],[500,1034,1035,2321,2369,2386,2387],[1034,2321,2369,2386,2387],[103,107,113,500,922,1032,1033,1104,2312,2321,2369,2386,2387],[103,107,113,500,1033,2312,2321,2369,2386,2387],[103,107,113,500,727,1022,1032,2312,2321,2369,2386,2387],[500,1020,1022,1025,1026,1027,2321,2369,2386,2387],[1025,2321,2369,2386,2387],[500,1022,1023,2321,2369,2386,2387],[1022,1024,2321,2369,2386,2387],[103,107,113,1020,1022,1023,1024,2312,2321,2369,2386,2387],[103,107,113,500,1022,1024,2312,2321,2369,2386,2387],[103,107,113,1020,1021,1023,1024,2312,2321,2369,2386,2387],[103,107,113,500,644,1022,1024,2312,2321,2369,2386,2387],[500,1038,1039,1041,1043,1045,1046,2321,2369,2386,2387],[1038,2321,2369,2386,2387],[103,107,113,500,1037,1038,1040,2312,2321,2369,2386,2387],[103,107,113,500,1037,1038,1041,2312,2321,2369,2386,2387],[103,107,113,500,1044,2312,2321,2369,2386,2387],[103,107,113,1045,2312,2321,2369,2386,2387],[103,107,113,500,1038,1042,2312,2321,2369,2386,2387],[103,107,113,1038,1043,2312,2321,2369,2386,2387],[103,107,113,500,1037,1039,2312,2321,2369,2386,2387],[103,107,113,500,1038,2312,2321,2369,2386,2387],[912,914,915,916,919,920,921,2321,2369,2386,2387],[103,107,113,500,914,918,919,2312,2321,2369,2386,2387],[103,107,113,500,914,920,2312,2321,2369,2386,2387],[103,107,113,500,914,2312,2321,2369,2386,2387],[103,107,113,127,917,2312,2321,2369,2386,2387],[103,107,113,913,2312,2321,2369,2386,2387],[500,1048,1049,2321,2369,2386,2387],[103,107,113,500,1049,2312,2321,2369,2386,2387],[103,107,113,1048,2312,2321,2369,2386,2387],[167,168,169,170,171,172,173,2321,2369,2386,2387],[103,107,113,1095,2312,2321,2369,2386,2387],[1097,1098,1099,1101,2321,2369,2386,2387],[103,107,113,1100,2312,2321,2369,2386,2387],[540,541,542,543,544,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,636,637,638,639,640,641,642,643,2321,2369,2386,2387],[487,2321,2369,2386,2387],[103,107,113,635,2312,2321,2369,2386,2387],[103,107,113,487,500,545,611,2312,2321,2369,2386,2387],[103,107,113,613,2312,2321,2369,2386,2387],[103,107,113,174,644,687,1095,1096,1102,1103,2312,2321,2369,2386,2387],[110,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,2321,2369,2386,2387],[103,107,113,784,2312,2321,2369,2386,2387],[484,2321,2369,2386,2387],[151,152,153,154,155,156,2321,2369,2386,2387],[157,178,485,488,489,490,491,492,493,494,495,496,497,498,499,2321,2369,2386,2387],[94,500,2321,2369,2386,2387],[158,159,160,161,165,166,175,176,177,2321,2369,2386,2387],[103,107,113,160,2312,2321,2369,2386,2387],[162,163,164,2321,2369,2386,2387],[103,107,113,164,2312,2321,2369,2386,2387],[103,107,113,162,163,2312,2321,2369,2386,2387],[174,2321,2369,2386,2387],[112,486,2321,2369,2386,2387],[112,2321,2369,2386,2387],[2120,2321,2369,2386,2387],[1448,2321,2369,2386,2387],[1446,1447,1449,2321,2369,2386,2387],[1448,1452,1455,1457,1458,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,2321,2369,2386,2387],[1448,1452,1453,2321,2369,2386,2387],[1448,1452,2321,2369,2386,2387],[1448,1449,1502,2321,2369,2386,2387],[1454,2321,2369,2386,2387],[1454,1459,2321,2369,2386,2387],[1454,1458,2321,2369,2386,2387],[1451,1454,1458,2321,2369,2386,2387],[1454,1457,1480,2321,2369,2386,2387],[1452,1454,2321,2369,2386,2387],[1451,2321,2369,2386,2387],[1448,1456,2321,2369,2386,2387],[1452,1456,1457,1458,2321,2369,2386,2387],[1451,1452,2321,2369,2386,2387],[1448,1449,2321,2369,2386,2387],[1448,1449,1502,1504,2321,2369,2386,2387],[1448,1505,2321,2369,2386,2387],[1512,1513,1514,2321,2369,2386,2387],[1448,1502,1503,2321,2369,2386,2387],[1448,1450,1517,2321,2369,2386,2387],[1506,1508,2321,2369,2386,2387],[1505,1508,2321,2369,2386,2387],[1448,1457,1466,1502,1503,1504,1505,1508,1509,1510,1511,1515,1516,2321,2369,2386,2387],[1483,1508,2321,2369,2386,2387],[1506,1507,2321,2369,2386,2387],[1448,1517,2321,2369,2386,2387],[1505,1509,1510,2321,2369,2386,2387],[1508,2321,2369,2386,2387],[483,2321,2369,2386,2387],[103,107,112,2312,2321,2369,2386,2387],[2321,2369,2386,2387,2441],[2321,2369,2386,2387,2439,2441],[2321,2369,2386,2387,2430,2438,2439,2440,2442,2444],[2321,2369,2386,2387,2428],[2321,2369,2386,2387,2431,2436,2441,2444],[2321,2369,2386,2387,2427,2444],[2321,2369,2386,2387,2431,2432,2435,2436,2437,2444],[2321,2369,2386,2387,2431,2432,2433,2435,2436,2444],[2321,2369,2386,2387,2428,2429,2430,2431,2432,2436,2437,2438,2440,2441,2442,2444],[2321,2369,2386,2387,2444],[2321,2369,2386,2387,2426,2428,2429,2430,2431,2432,2433,2435,2436,2437,2438,2439,2440,2441,2442,2443],[2321,2369,2386,2387,2426,2444],[2321,2369,2386,2387,2431,2433,2434,2436,2437,2444],[2321,2369,2386,2387,2435,2444],[2321,2369,2386,2387,2436,2437,2441,2444],[2321,2369,2386,2387,2429,2439],[1695,2321,2369,2386,2387],[1696,1697,1698,2321,2369,2386,2387],[1696,1697,1699,2321,2369,2386,2387],[2321,2369,2386,2387,2421,2476,2477],[2321,2369,2386,2387,2420,2421],[2321,2369,2386,2387,2426,2465],[2321,2369,2386,2387,2452],[2321,2369,2386,2387,2448,2465],[2321,2369,2386,2387,2447,2448,2449,2452,2464,2465,2466,2467,2468,2469,2470,2471,2472,2473],[2321,2369,2386,2387,2469],[2321,2369,2386,2387,2447,2449,2452,2470,2471],[2321,2369,2386,2387,2468,2472],[2321,2369,2386,2387,2447,2450,2451],[2321,2369,2386,2387,2450],[2321,2369,2386,2387,2447,2448,2449,2452,2464],[2321,2369,2386,2387,2453,2458,2464],[2321,2369,2386,2387,2464],[2321,2369,2386,2387,2453,2464],[2321,2369,2386,2387,2453,2454,2455,2456,2457,2458,2459,2460,2461,2462,2463],[2001,2034,2321,2369,2386,2387],[2001,2321,2369,2386,2387],[2034,2035,2036,2321,2369,2386,2387],[2001,2035,2321,2369,2386,2387],[1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,2000,2321,2369,2386,2387],[1983,1984,2001,2321,2369,2386,2387],[1983,2001,2321,2369,2386,2387],[1994,2001,2321,2369,2386,2387],[1996,1997,1998,1999,2321,2369,2386,2387],[1985,2001,2321,2369,2386,2387],[2010,2321,2369,2386,2387],[2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2321,2369,2386,2387],[2002,2010,2012,2321,2369,2386,2387],[2008,2010,2017,2321,2369,2386,2387],[2012,2321,2369,2386,2387],[2010,2012,2321,2369,2386,2387],[2011,2321,2369,2386,2387],[2002,2010,2321,2369,2386,2387],[2003,2004,2005,2006,2007,2008,2009,2011,2321,2369,2386,2387],[2321,2369,2386,2387,2489],[525,2321,2369,2386,2387],[2286,2287,2288,2289,2290,2291,2292,2293,2294,2295,2296,2297,2298,2321,2369,2386,2387],[2299,2321,2369,2386,2387],[1579,2321,2369,2386,2387],[1574,1575,2321,2369,2386,2387],[103,107,113,1644,2312,2321,2369,2386,2387],[1647,2321,2369,2386,2387],[103,107,113,1593,1677,2312,2321,2369,2386,2387],[103,107,113,1576,1593,1677,2312,2321,2369,2386,2387],[103,107,113,1677,2312,2321,2369,2386,2387],[1653,2321,2369,2386,2387],[103,107,113,1621,2312,2321,2369,2386,2387],[103,107,113,1677,1681,2312,2321,2369,2386,2387],[1657,2321,2369,2386,2387],[1585,1586,2321,2369,2386,2387],[1584,2321,2369,2386,2387],[103,107,113,1577,2312,2321,2369,2386,2387],[103,107,113,1598,2312,2321,2369,2386,2387],[1595,1596,2321,2369,2386,2387],[1598,2321,2369,2386,2387],[1595,2321,2369,2386,2387],[1590,2321,2369,2386,2387],[1621,1628,1660,1675,1676,1889,2321,2369,2386,2387],[103,107,113,1661,2312,2321,2369,2386,2387],[103,107,113,1590,1615,2312,2321,2369,2386,2387],[1629,2321,2369,2386,2387],[1631,2321,2369,2386,2387],[1684,2321,2369,2386,2387],[103,107,113,1590,1621,2312,2321,2369,2386,2387],[1634,2321,2369,2386,2387],[1686,2321,2369,2386,2387],[103,107,113,1593,1621,2312,2321,2369,2386,2387],[1688,2321,2369,2386,2387],[103,107,113,1590,1591,1621,2312,2321,2369,2386,2387],[1622,2321,2369,2386,2387],[1663,2321,2369,2386,2387],[1603,2321,2369,2386,2387],[1690,2321,2369,2386,2387],[1637,2321,2369,2386,2387],[103,107,113,1621,1677,2312,2321,2369,2386,2387],[103,107,113,1590,1610,1640,1677,2312,2321,2369,2386,2387],[103,107,113,1572,2312,2321,2369,2386,2387],[1692,2321,2369,2386,2387],[103,107,113,1595,1598,2312,2321,2369,2386,2387],[1885,2321,2369,2386,2387],[103,107,113,1597,1598,1694,1884,2312,2321,2369,2386,2387],[1887,2321,2369,2386,2387],[1617,2321,2369,2386,2387],[1616,2321,2369,2386,2387],[1582,2321,2369,2386,2387],[1642,2321,2369,2386,2387],[1667,2321,2369,2386,2387],[103,107,113,1619,2312,2321,2369,2386,2387],[1580,1581,1594,1598,1599,1600,1601,1602,1604,1678,1679,1680,1681,1682,1683,1685,1687,1689,1691,1693,1886,1888,2321,2369,2386,2387],[1573,1576,1578,1594,1598,1599,1600,1601,1602,1604,1889,2321,2369,2386,2387],[1573,1576,1578,1583,1587,2321,2369,2386,2387],[1588,1627,2321,2369,2386,2387],[1623,1624,1625,1626,2321,2369,2386,2387],[1630,1632,1633,1635,1636,1638,1639,1641,1643,1645,1646,1648,1649,1650,1651,1652,1654,1655,1656,1658,1659,2321,2369,2386,2387],[1662,1664,1665,1666,1668,1669,1670,1671,1672,1673,1674,2321,2369,2386,2387],[1610,2321,2369,2386,2387],[1609,2321,2369,2386,2387],[103,107,113,1593,1598,2312,2321,2369,2386,2387],[103,107,113,1576,1593,1598,1600,2312,2321,2369,2386,2387],[1593,1597,2321,2369,2386,2387],[1572,1591,1594,1598,1599,1600,1601,1602,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,2321,2369,2386,2387],[1605,2321,2369,2386,2387],[1593,2321,2369,2386,2387],[103,107,113,1591,1616,2312,2321,2369,2386,2387],[1591,2321,2369,2386,2387],[103,107,113,1591,1605,2312,2321,2369,2386,2387],[2321,2334,2338,2369,2386,2387,2412],[2321,2334,2369,2386,2387,2401,2412],[2321,2329,2369,2386,2387],[2321,2331,2334,2369,2386,2387,2409,2412],[2321,2369,2386,2387,2389,2409],[2321,2329,2369,2386,2387,2419],[2321,2331,2334,2369,2386,2387,2389,2412],[2321,2326,2327,2330,2333,2369,2380,2386,2387,2401,2412],[2321,2334,2341,2369,2386,2387],[2321,2326,2332,2369,2386,2387],[2321,2334,2355,2356,2369,2386,2387],[2321,2330,2334,2369,2386,2387,2404,2412,2419],[2321,2355,2369,2386,2387,2419],[2321,2328,2329,2369,2386,2387,2419],[2321,2334,2369,2386,2387],[2321,2328,2329,2330,2331,2332,2333,2334,2335,2336,2338,2339,2340,2341,2342,2343,2344,2345,2346,2347,2348,2349,2350,2351,2352,2353,2354,2356,2357,2358,2359,2360,2361,2369,2386,2387],[2321,2334,2349,2369,2386,2387],[2321,2334,2341,2342,2369,2386,2387],[2321,2332,2334,2342,2343,2369,2386,2387],[2321,2333,2369,2386,2387],[2321,2326,2329,2334,2369,2386,2387],[2321,2334,2338,2342,2343,2369,2386,2387],[2321,2338,2369,2386,2387],[2321,2332,2334,2337,2369,2386,2387,2412],[2321,2326,2331,2334,2341,2369,2386,2387],[2321,2369,2386,2387,2401],[2321,2329,2334,2355,2369,2386,2387,2417,2419],[2321,2369,2386,2387,2478,2486,2487,2488,2490],[2321,2369,2386,2387,2478,2486],[2321,2369,2386,2387,2487],[2321,2369,2386,2387,2491,2492],[2321,2369,2386,2387,2477,2493],[2321,2369,2386,2387,2492,2497],[2321,2369,2386,2387,2492,2496],[2321,2369,2386,2387,2477,2497],[2321,2369,2386,2387,2421,2425,2476,2477,2495],[2321,2369,2386,2387,2477],[2321,2369,2386,2387,2477,2501],[91,2321,2369,2386,2387],[87,88,90,2321,2369,2380,2381,2383,2384,2385,2386,2387,2389,2401,2409,2412,2418,2419,2421,2422,2423,2424,2425,2445,2446,2475,2476,2477],[87,88,89,2321,2369,2386,2387,2423],[87,2321,2369,2386,2387],[88,2321,2369,2386,2387],[89,90,2321,2369,2386,2387],[2321,2369,2386,2387,2474],[2321,2369,2386,2387,2421,2477],[103,107,113,1432,1433,2103,2109,2280,2312,2321,2369,2386,2387],[103,106,107,113,2312,2321,2369,2386,2387],[98,102,2321,2369,2386,2387],[102,2321,2369,2386,2387],[104,1533,2321,2369,2386,2387],[104,128,130,136,1533,1535,2321,2369,2386,2387],[104,128,1533,2321,2369,2386,2387],[103,104,105,107,109,110,111,113,137,140,1535,1537,2312,2315,2321,2369,2386,2387],[103,104,105,107,113,133,2312,2321,2369,2386,2387],[103,104,105,107,113,1439,1949,2312,2321,2369,2386,2387],[92,103,104,105,107,113,137,1105,1413,1429,1521,1544,1592,1593,1949,1952,1953,1954,1955,1956,1970,1971,2312,2321,2369,2386,2387],[103,104,105,107,113,1413,1536,2312,2315,2321,2369,2386,2387],[103,104,105,107,109,113,2312,2321,2369,2386,2387],[103,104,105,107,113,2312,2321,2369,2386,2387],[103,104,105,107,113,1975,2312,2321,2369,2386,2387],[92,103,104,105,107,113,1110,2056,2064,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1105,2058,2312,2321,2369,2386,2387],[104,1413,2321,2369,2386,2387],[103,104,105,107,113,1104,2068,2069,2070,2312,2321,2369,2386,2387],[103,104,105,107,109,113,1104,2068,2312,2321,2369,2386,2387],[103,104,105,107,113,1110,2069,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1110,2312,2321,2369,2386,2387],[103,104,105,107,113,1413,1542,2060,2073,2312,2321,2369,2386,2387],[103,104,105,107,113,2073,2312,2321,2369,2386,2387],[104,2321,2369,2386,2387],[103,104,105,107,113,2073,2074,2075,2076,2077,2312,2321,2369,2386,2387],[103,104,105,107,113,2058,2073,2078,2312,2321,2369,2386,2387],[103,104,105,107,113,2059,2312,2321,2369,2386,2387],[103,104,107,113,1104,1105,1544,2060,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,2059,2061,2062,2312,2321,2369,2386,2387],[103,104,105,107,109,113,1535,2057,2058,2059,2062,2063,2064,2312,2321,2369,2386,2387],[103,104,105,107,113,1443,2312,2321,2369,2386,2387],[103,104,105,107,109,113,1104,2312,2321,2369,2386,2387],[103,104,105,107,113,2058,2312,2321,2369,2386,2387],[103,104,105,107,113,1948,1949,2312,2321,2369,2386,2387],[103,104,105,107,113,137,1105,1413,1429,1444,1445,1518,1519,1534,1535,2312,2321,2369,2386,2387],[103,104,105,107,113,128,130,137,1104,1105,1535,2083,2312,2321,2369,2386,2387],[103,104,105,107,113,1105,1413,1429,1955,2097,2312,2321,2369,2386,2387],[103,104,107,113,1534,2312,2321,2369,2386,2387],[104,134,140,2321,2369,2386,2387],[104,107,2315,2321,2369,2386,2387],[104,1105,2100,2321,2369,2386,2387],[103,104,107,113,137,2312,2321,2369,2386,2387],[104,2105,2107,2109,2111,2113,2321,2369,2386,2387],[103,104,107,113,1413,2117,2312,2321,2369,2386,2387],[92,103,104,107,113,2119,2120,2312,2321,2369,2386,2387],[103,104,107,113,2122,2312,2321,2369,2386,2387],[103,104,107,113,1528,2124,2312,2321,2369,2386,2387],[103,104,105,107,113,1535,2312,2321,2369,2386,2387],[103,104,105,107,113,143,2312,2315,2321,2369,2386,2387],[103,104,105,107,109,113,140,142,144,145,146,148,149,1106,1535,2312,2321,2369,2386,2387],[103,104,105,107,113,134,143,147,2312,2321,2369,2386,2387],[103,104,105,107,113,137,150,1105,2312,2321,2369,2386,2387],[103,104,105,107,113,134,140,1535,2312,2321,2369,2386,2387],[92,103,104,105,107,109,113,140,2312,2321,2369,2386,2387],[103,104,105,107,113,140,141,2312,2321,2369,2386,2387],[103,104,105,107,113,140,1113,1535,2312,2321,2369,2386,2387],[103,104,105,107,111,113,1535,2312,2321,2369,2386,2387],[103,104,105,107,113,133,1110,2312,2315,2321,2369,2386,2387],[103,104,105,107,113,1111,2312,2315,2321,2369,2386,2387],[103,104,105,107,113,137,140,1109,1112,1535,2312,2321,2369,2386,2387],[103,104,105,107,113,1107,1108,1114,2312,2321,2369,2386,2387],[92,103,104,107,113,1534,1538,1539,1540,2312,2321,2369,2386,2387],[104,107,128,129,133,134,136,137,1527,1528,2315,2321,2369,2386,2387],[104,107,1535,2315,2321,2369,2386,2387],[104,107,111,133,137,1527,2315,2321,2369,2386,2387],[104,107,129,1115,1117,1118,1416,1417,1419,1420,1422,1426,1428,1526,2315,2321,2369,2386,2387],[104,113,2321,2369,2386,2387],[104,113,1534,2321,2369,2386,2387],[104,107,113,129,133,2315,2321,2369,2386,2387],[94,104,113,132,135,138,139,2321,2369,2386,2387],[104,107,113,129,131,132,135,136,1528,2315,2321,2369,2386,2387],[104,132,134,135,137,1528,2321,2369,2386,2387],[104,1081,1104,2321,2369,2386,2387],[104,687,2321,2369,2386,2387],[104,137,2321,2369,2386,2387],[104,114,127,130,1529,1530,2321,2369,2386,2387],[104,114,1530,2321,2369,2386,2387],[104,114,127,128,129,130,136,1105,1528,1530,1531,1532,2321,2369,2386,2387],[114,1530,2321,2369,2386,2387],[104,2314,2321,2369,2386,2387],[94,104,127,2321,2369,2386,2387],[103,104,105,107,113,129,131,136,137,1104,1413,1415,1418,2312,2321,2369,2386,2387],[103,104,105,107,113,129,131,136,137,1104,1414,1415,2312,2321,2369,2386,2387],[103,104,105,107,113,129,131,132,135,137,1104,1413,1414,1415,1535,2312,2321,2369,2386,2387],[103,104,105,107,113,1551,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1542,2058,2312,2321,2369,2386,2387],[103,104,105,107,113,1105,1542,2060,2132,2312,2321,2369,2386,2387],[103,104,105,107,113,147,1104,1542,2099,2312,2321,2369,2386,2387],[103,104,105,107,113,1105,1528,1542,2060,2099,2312,2321,2369,2386,2387],[103,104,105,107,113,1552,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1553,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1430,1535,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1535,1554,2312,2321,2369,2386,2387],[103,104,105,107,113,2140,2143,2144,2312,2321,2369,2386,2387],[103,104,105,107,113,2140,2141,2142,2312,2321,2369,2386,2387],[103,104,105,107,113,2141,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,2140,2312,2321,2369,2386,2387],[103,104,105,107,113,140,2140,2312,2321,2369,2386,2387],[103,104,107,113,1104,1105,1554,2312,2321,2369,2386,2387],[103,104,105,107,113,1105,1554,2060,2146,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1554,2058,2312,2321,2369,2386,2387],[103,104,105,107,113,1110,1413,1548,2312,2321,2369,2386,2387],[103,104,105,107,113,1105,1413,1544,1548,2312,2321,2369,2386,2387],[103,104,105,107,113,1105,1110,1413,1548,2060,2150,2151,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1105,1534,1555,1556,1557,2099,2312,2321,2369,2386,2387],[103,104,105,107,113,1105,1557,2060,2153,2312,2321,2369,2386,2387],[103,104,105,107,113,1105,1557,2060,2156,2312,2321,2369,2386,2387],[103,104,105,107,113,687,1105,1413,1421,1429,1524,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1110,1543,2155,2312,2321,2369,2386,2387],[103,104,105,107,111,113,1528,1543,2060,2312,2321,2369,2386,2387],[103,104,105,107,113,137,1104,1105,1413,1429,1522,1534,1547,1559,1974,2060,2312,2315,2321,2369,2386,2387],[103,104,105,107,113,137,1104,1105,1429,1444,2060,2312,2321,2369,2386,2387],[103,104,105,107,113,137,1104,1105,1413,1429,1518,1519,1534,1974,2060,2312,2321,2369,2386,2387],[103,104,105,107,113,1105,2057,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1110,1535,2312,2321,2369,2386,2387],[103,104,105,107,113,1424,2312,2321,2369,2386,2387],[103,104,105,107,113,1413,1424,2312,2321,2369,2386,2387],[103,104,105,107,113,483,1413,1424,2312,2321,2369,2386,2387],[103,104,105,107,113,2167,2312,2321,2369,2386,2387],[104,2166,2168,2321,2369,2386,2387],[103,104,105,107,113,2174,2312,2321,2369,2386,2387],[104,2175,2176,2321,2369,2386,2387],[103,104,105,107,113,483,1105,2057,2312,2321,2369,2386,2387],[103,104,105,107,113,483,1105,2057,2178,2312,2321,2369,2386,2387],[103,104,105,107,113,2167,2178,2312,2321,2369,2386,2387],[104,2178,2179,2180,2321,2369,2386,2387],[103,104,105,107,113,2182,2312,2321,2369,2386,2387],[103,104,105,107,113,2167,2182,2312,2321,2369,2386,2387],[104,2182,2183,2184,2321,2369,2386,2387],[103,104,105,107,113,483,1105,2057,2186,2312,2321,2369,2386,2387],[103,104,105,107,113,2167,2186,2312,2321,2369,2386,2387],[104,2186,2187,2188,2321,2369,2386,2387],[103,104,105,107,113,2171,2190,2312,2321,2369,2386,2387],[103,104,105,107,113,2167,2190,2312,2321,2369,2386,2387],[104,2190,2191,2192,2321,2369,2386,2387],[103,104,105,107,113,2171,2194,2312,2321,2369,2386,2387],[103,104,105,107,113,2167,2194,2312,2321,2369,2386,2387],[104,2194,2195,2196,2321,2369,2386,2387],[103,104,105,107,113,2198,2312,2321,2369,2386,2387],[103,104,105,107,113,1423,2198,2312,2321,2369,2386,2387],[104,2198,2199,2200,2321,2369,2386,2387],[103,104,105,107,113,2202,2312,2321,2369,2386,2387],[104,2202,2203,2204,2321,2369,2386,2387],[103,104,105,107,113,483,1105,2058,2206,2312,2321,2369,2386,2387],[104,2206,2207,2321,2369,2386,2387],[103,104,105,107,113,2209,2312,2321,2369,2386,2387],[104,2209,2210,2211,2321,2369,2386,2387],[103,104,105,107,113,483,1105,2057,2213,2312,2321,2369,2386,2387],[103,104,105,107,113,2167,2213,2312,2321,2369,2386,2387],[104,2213,2214,2215,2321,2369,2386,2387],[103,104,105,107,113,2217,2312,2321,2369,2386,2387],[104,2217,2218,2219,2321,2369,2386,2387],[103,104,105,107,113,1110,1423,1424,2165,2172,2173,2312,2321,2369,2386,2387],[103,104,105,107,113,1423,2312,2321,2369,2386,2387],[103,104,105,107,113,1105,1413,1423,1425,2312,2321,2369,2386,2387],[103,104,105,107,109,113,2222,2312,2321,2369,2386,2387],[103,104,105,107,113,1423,2223,2312,2321,2369,2386,2387],[103,104,105,107,113,1423,2165,2169,2312,2321,2369,2386,2387],[103,104,105,107,113,127,1104,1105,1558,1560,1566,2099,2225,2312,2321,2369,2386,2387],[103,104,105,107,113,1105,1528,1566,2060,2129,2227,2228,2312,2321,2369,2386,2387],[103,104,105,107,113,1105,2100,2312,2321,2369,2386,2387],[103,104,105,107,113,1105,1566,2058,2060,2081,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1566,2058,2099,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1421,2312,2321,2369,2386,2387],[103,104,105,107,113,136,1104,1105,1413,1443,2312,2321,2369,2386,2387],[103,104,105,107,113,137,687,1413,1421,2312,2315,2321,2369,2386,2387],[103,104,105,107,113,687,1104,1105,1421,1524,1557,2312,2321,2369,2386,2387],[103,104,105,107,113,1116,2312,2321,2369,2386,2387],[103,104,105,107,113,2312,2315,2321,2369,2386,2387],[103,104,105,107,113,687,1104,1105,1413,1427,2312,2321,2369,2386,2387],[103,104,105,107,113,687,1104,1105,1427,2060,2312,2321,2369,2386,2387],[103,104,105,107,113,1105,1413,1549,2060,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1545,2058,2312,2321,2369,2386,2387],[103,104,105,107,113,1545,2060,2240,2312,2321,2369,2386,2387],[103,104,105,107,113,1545,2060,2099,2312,2321,2369,2386,2387],[103,104,105,107,113,1545,2312,2321,2369,2386,2387],[103,104,105,107,113,1105,1545,2060,2312,2321,2369,2386,2387],[103,104,105,107,113,1105,1545,2060,2238,2312,2321,2369,2386,2387],[103,104,105,107,113,127,147,1104,1105,1546,2312,2321,2369,2386,2387],[103,104,105,107,113,1528,1546,2060,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1546,2058,2312,2321,2369,2386,2387],[103,104,105,107,113,1546,2245,2312,2321,2369,2386,2387],[103,104,105,107,113,1105,1413,1429,1547,2060,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1555,2058,2099,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1105,1555,2248,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1556,2058,2312,2321,2369,2386,2387],[103,104,105,107,113,1105,1556,2060,2250,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1555,1556,1557,1559,2058,2099,2312,2321,2369,2386,2387],[103,104,105,107,113,1105,1557,1559,2060,2099,2252,2312,2321,2369,2386,2387],[103,104,105,107,111,113,1104,1110,1528,1558,2058,2312,2321,2369,2386,2387],[103,104,105,107,111,113,1104,1105,1558,2060,2254,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1110,1558,1559,2058,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1559,2058,2312,2321,2369,2386,2387],[103,104,105,107,113,1105,1559,2060,2256,2257,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1560,2058,2312,2321,2369,2386,2387],[103,104,105,107,113,1105,1560,2060,2259,2312,2321,2369,2386,2387],[103,104,105,107,113,1105,1528,1560,2060,2261,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1414,1561,2130,2312,2321,2369,2386,2387],[103,104,105,107,113,1561,2130,2263,2312,2321,2369,2386,2387],[103,104,105,107,113,127,1561,2312,2321,2369,2386,2387],[103,104,105,107,113,1562,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1563,2058,2312,2321,2369,2386,2387],[103,104,105,107,113,1563,2267,2312,2321,2369,2386,2387],[103,104,105,107,113,150,1105,2312,2321,2369,2386,2387],[103,104,105,107,113,150,2312,2321,2369,2386,2387],[103,104,105,107,113,150,2060,2312,2321,2369,2386,2387],[103,104,105,107,113,147,150,1104,2312,2321,2369,2386,2387],[103,104,105,107,113,150,1105,1528,2060,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1564,2312,2321,2369,2386,2387],[103,104,105,107,113,1564,2312,2321,2369,2386,2387],[103,104,105,107,113,1105,1565,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1535,1565,2312,2321,2369,2386,2387],[103,104,105,107,113,1565,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1565,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1550,2060,2281,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1105,1429,1444,2312,2321,2369,2386,2387],[103,104,105,107,113,137,1105,1413,1421,1429,1430,1445,1520,1522,1534,1972,2060,2312,2321,2369,2386,2387],[103,104,105,107,113,1104,1105,1413,1429,1534,2312,2315,2321,2369,2386,2387],[103,104,105,107,113,687,1105,1413,1421,1429,1524,1534,2312,2321,2369,2386,2387],[103,104,105,107,113,1421,1534,2312,2321,2369,2386,2387],[103,104,105,107,113,1429,2312,2321,2369,2386,2387],[103,104,105,107,113,1429,2299,2312,2321,2369,2386,2387],[103,104,105,107,113,1105,1429,1433,2312,2321,2369,2386,2387],[103,104,105,107,113,1105,1429,2312,2321,2369,2386,2387],[103,104,105,107,113,687,1413,1429,1439,2312,2321,2369,2386,2387],[103,104,105,107,113,1429,1534,2312,2321,2369,2386,2387],[103,104,105,107,113,137,1104,1105,1413,1429,1431,1434,1435,1436,1437,1438,1440,1441,1442,1520,1521,1534,1535,2312,2321,2369,2386,2387],[103,104,105,107,113,137,687,1105,1413,1421,1429,1430,1431,1522,1523,1525,1534,1547,2060,2300,2312,2315,2321,2369,2386,2387],[103,104,105,107,113,137,687,1105,1413,1429,1430,1522,1523,1525,1534,2312,2321,2369,2386,2387],[103,104,105,107,113,137,687,1105,1413,1421,1429,1430,1431,1522,1523,1525,1534,1547,1555,2060,2300,2312,2315,2321,2369,2386,2387],[103,104,105,107,113,2068,2070,2312,2321,2369,2386,2387],[103,104,105,107,113,2083,2312,2321,2369,2386,2387],[103,104,105,107,113,137,1104,1413,1533,1970,2312,2321,2369,2386,2387],[103,104,105,107,113,131,137,1104,1105,1413,1418,2312,2321,2369,2386,2387],[103,104,105,107,113,140,1110,1413,1429,1534,1547,2130,2281,2312,2321,2369,2386,2387],[107,2315,2321,2369,2386,2387],[104,2321,2369,2381,2386,2387,2391,2412,2477,2482,2485,2494,2498,2499,2500,2502,2503]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"2ab096661c711e4a81cc464fa1e6feb929a54f5340b46b0a07ac6bbf857471f0","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"73f78680d4c08509933daf80947902f6ff41b6230f94dd002ae372620adb0f60","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5239f5c01bcfa9cd32f37c496cf19c61d69d37e48be9de612b541aac915805b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"bde31fd423cd93b0eff97197a3f66df7c93e8c0c335cbeb113b7ff1ac35c23f4","impliedFormat":1},{"version":"a7ca8df4f2931bef2aa4118078584d84a0b16539598eaadf7dce9104dfaa381c","impliedFormat":1},{"version":"11443a1dcfaaa404c68d53368b5b818712b95dd19f188cab1669c39bee8b84b3","impliedFormat":1},{"version":"36977c14a7f7bfc8c0426ae4343875689949fb699f3f84ecbe5b300ebf9a2c55","impliedFormat":1},{"version":"7f698624bbbb060ece7c0e51b7236520ebada74b747d7523c7df376453ed6fea","impliedFormat":1},{"version":"19efad8495a7a6b064483fccd1d2b427403dd84e67819f86d1c6ee3d7abf749c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1eef826bc4a19de22155487984e345a34c9cd511dd1170edc7a447cb8231dd4a","affectsGlobalScope":true,"impliedFormat":99},"65996936fbb042915f7b74a200fcdde7e410f32a669b1ab9597cfaa4b0faddb5",{"version":"f468b74459f1ad4473b36a36d49f2b255f3c6b5d536c81239c2b2971df089eaf","impliedFormat":1},{"version":"556ccd493ec36c7d7cb130d51be66e147b91cc1415be383d71da0f1e49f742a9","impliedFormat":1},{"version":"95aba78013d782537cc5e23868e736bec5d377b918990e28ed56110e3ae8b958","impliedFormat":1},{"version":"524a409ad72186b7f6cb16898c349465cfa876f641d6cb6137b3123d5cfca619","impliedFormat":1},{"version":"ebe84ad8344962b7117a3b95065f47383215020eaf1b626463863b45b4d16e62","impliedFormat":1},{"version":"de5abbc02627403ac5796572520dc2b42df54f1257e7218a9ef37509d9b56972","impliedFormat":1},{"version":"8fefccf7758a68c7053d9830ba385f45300b612807629f3559630988abeca71b","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"0e0542f4d578424ae30421da410c0efb116a350dabaf63c4635ce41f5551ba1f","impliedFormat":1},{"version":"c0191592be8eb7906f99ac4b8798d80a585b94001ea1a5f50d6ce5b0d13a5c62","impliedFormat":99},{"version":"318d19118bf6bf8d088441c948990f53cafc79ed581b78f3d41a0f7a3f5f145c","impliedFormat":1},{"version":"25900318042675aee6d709c82309effd29c995d03f92f8b7a469d38e07c7f846","affectsGlobalScope":true,"impliedFormat":1},{"version":"860814185d89237c84a6bd1e4f108c2c0b2401609a74a33bc7cab14ea4ee9f21","impliedFormat":99},{"version":"e1ddcbacb7658bf0683bca4ebd31bd05f64823712651263bfc75128a45f00ff7","impliedFormat":99},{"version":"5b2f1e43f07ae5590bd899398b23b2d114ed9c3b6b3fb4cb60d4c6216d712b87","impliedFormat":99},{"version":"94c8b35ee85f4a36f1536050dd2eed1490239340f72733d787b84f6ee13b3dbb","impliedFormat":99},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"8581f0150a40bc1df613e00da0100ee40bfefa9fbc9b230a0076c9a308c244c8","signature":"7619d41131900b9c062164455e3b48429842941c90917209f97b32e766572d3e"},{"version":"52f5c39e78a90c1d8ed7db18f39d890b2e8464a3f44d4233617893f6648e317d","impliedFormat":1},{"version":"a69e8bce30aea7ec98f3b6ddfbc378c92826fede01aafbaec703057c2503ea51","impliedFormat":1},{"version":"faf770b3935c2ba6558b2bb65af5d5de58945d81f496dc1a5938c41a1abb358b","impliedFormat":99},{"version":"380b919bfa0516118edaf25b99e45f855e7bc3fd75ce4163a1cfe4a666388804","impliedFormat":1},{"version":"40de86ced5175a6ffe84a52abe6ac59ac0efbc604a5975a8c6476c3ddc682ff1","impliedFormat":1},{"version":"fcf79300e5257a23ed3bacaa6861d7c645139c6f7ece134d15e6669447e5e6db","impliedFormat":1},{"version":"187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","impliedFormat":1},{"version":"aa2c18a1b5a086bbcaae10a4efba409cc95ba7287d8cf8f2591b53704fea3dea","impliedFormat":1},{"version":"5a0b15210129310cee9fa6af9200714bb4b12af4a04d890e15f34dbea1cf1852","impliedFormat":1},{"version":"0244119dbcbcf34faf3ffdae72dab1e9bc2bc9efc3c477b2240ffa94af3bca56","impliedFormat":1},{"version":"00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","impliedFormat":1},{"version":"a873c50d3e47c21aa09fbe1e2023d9a44efb07cc0cb8c72f418bf301b0771fd3","impliedFormat":1},{"version":"7c14ccd2eaa82619fffc1bfa877eb68a012e9fb723d07ee98db451fadb618906","impliedFormat":1},{"version":"49c36529ee09ea9ce19525af5bb84985ea8e782cb7ee8c493d9e36d027a3d019","impliedFormat":1},{"version":"df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","impliedFormat":1},{"version":"4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd","impliedFormat":1},{"version":"9701c8a809fc4799215b4be61e7d77485a6c269ce54d0793c53c0182f6168658","signature":"be07557fd9157ca6b5d1978c21c8d88d3f67eb0f78b4a8ca35df1082dca9936c"},{"version":"0faed574ac7add37d53fd63688d470292b1c9375500cb1b9d59e40982a6a2d4c","signature":"563cbeff1949c04c2ef8019f53fb0a662b952f5899c91f4023d4a1cace3e6a12"},{"version":"458ba7766b75821db88a9e3a82d1a5a077601407df7074cdae0aaeb420a12227","signature":"d65de4df2e4daedbd81cb2eac348261cd44bc66fe7f3621eaffe645e88dad130"},{"version":"049ab0431e432e82a8d4e9e67c226a1b06b0b7fbc717947b31de14bd45d2432a","signature":"9c5665b1986e8b8ed1a649a90eeea270c9108d07bed500ecfdd64db46fa27c74"},{"version":"0fece3f69b2d8b9625171e6baded9b978a4c9507fdd12b46d66c2f19ee16d881","signature":"63205b21c5c43b3b72b01921324508b5eee86fc33c9a929482b9d5341c0fb036"},{"version":"c78e57507f352ed3f4b0121f748e0ab2ae86e6379fda3d55c907e9a05ee44d13","signature":"e3991e8c3b7b2908e01e3db099c7774c514309d1d4b941476948c4e237a8cfc2"},{"version":"7a41ff742ae9b818a2a7a7fb158870393619a5a5fb773b181ea482b631cfb061","signature":"4a523b3cefa160981ce7248da0f144f61c77cf3661a551ea1cb6272e1523c90d"},{"version":"c6f9373ea1968b4958b855e30904f2a7d0152b9b477241f523895a4941ba7108","signature":"e424f6182ba6a69c94530430c7b2b4f9b63f0c5dff951a7a4fd804a6dfa784da"},{"version":"9ceb5d09a35a13c567b0d489ee550a9adc6981d4ed2b32811c7c3dd7ca00df8d","signature":"182894ae29f669ba9b640841a71aa5148d256a416f4008353eda6761c5dc30d2"},{"version":"46891b2836f1953416414c93c96fabf621e3b94c65be237eaf2aabcfcee409d7","signature":"8d83a9b4f436f29ecdd89af3994aa55a1dafd8511bb7eb356f897a810b223b81"},{"version":"f3688d50959d31cf849535023dceb5bec1f48eb68b6e9fb9273ade1c64daa1eb","signature":"ceba66401fa2692ae179b26fabbaea855a2409014371133f8a26a306111183e1"},{"version":"8c98a68934697f4ec08a5d3a293a6771b8f3d963d0c21e6f433f95bda580a314","signature":"381f39a2c6a9508f653a84b43b346867d70896712655853e8a2dfcef3c0b8aec"},{"version":"629b4a81c8e38f30e8144b6a6b37adda26b4669858d3c24748443e1017f6dcfe","signature":"24d764db1a0643c6d9477799e3c1add95ca2cfbb0bae0768f3281c2d0dc0dfff"},{"version":"5f35695b50bcd8c9b60b67d0ecbc342ac9492119056c10796fb1944bf34109a4","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"27a47c5461677ba48f59978dfcb094cdfa10f772bbb28cd158c1b4818413b016","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"48c5eaab5574f1c388873fcb1b6fee5e657ea930867e5cd84dc9593eaf337189","signature":"690f8331a0b8a5aad028db258b13ef9a18a04afe5622903361f5be4b89c913cd"},{"version":"b4492c3409a367c459fadc11294b0eae8fc81463c1be5112b3f0c4afdec4c489","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"5903f95657f31e779d3f5d4e1568582da03c631e553de96999cab75d3fed1dc1","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"176eccb49c5e533cac85b5a5bc077f4ca5d026604962ef2ee7ed1c15c79cbdf4","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"c39cb8aac612362378716ecdebd348df782cc24445e9e8238f5b011518816850","signature":"3e7a4f70f4dfd529a9b3bfd247a83d4c2e02746edc3d9079b7bc0f1392e5087b"},{"version":"ecb915eb83c1df5622ef6d68214c2a45e17270c395b4f2c1964ecd433a19847b","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"acd4045783fafe623f2d35019e5dd82221cc34173a43421b30aa99ab2e58d7a3","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"b2d710eeb8708d0a1d42a4e7f08d569d96e9b172132cf0d57609e03f215ca15b","signature":"a131fb8810b3011fa3dae35c6b0c19ca10edd96d099a987d63a6bd6c8f488bb1"},{"version":"55f16f0ff7dd262a9580fefab47b85fa13bc54ebf21279392fd049c78f7f16d1","impliedFormat":1},{"version":"8c88919faba2b1eb94197a0f3e21d6a827aa574edf4f6c1d0fc402a754749dc8","impliedFormat":1},{"version":"c8044346db3a2a4dcd61dfd96c7cefcb6b1c212ee3e48d474253aafc79970658","impliedFormat":1},{"version":"445f99b5b19666f40eb49bbdedb117a9d9713b91095ea49a371f7941e6a8e0e0","impliedFormat":1},{"version":"d0d35f701530154b2d2c119bd628543e94963a8b43568b61119299eba8f1d4c7","impliedFormat":1},{"version":"d9618b24b11dab78cb0232eef9f3c53cd82e5bc5c998685283265eb82a395b9e","impliedFormat":1},{"version":"a9e6b1ecb19c3094b7ad0075b2910f76e100b9bc04aa7436a33968af73aeba3f","impliedFormat":1},{"version":"7a536e3ebcee17d5d3c3f9466484e97643d81fcf60f1be83a29b7c29326fc076","impliedFormat":1},{"version":"1df8ecdd79b8d5fd6db26c794f25b306a871ca33526967225a7eda4a48384c4c","impliedFormat":1},{"version":"9680c5777715120af62968d8dc0f903e4328eec5518a4e2490caaa1c080ac32d","impliedFormat":1},{"version":"94abb9c4a3661f09b71006cf9f7ace48b80977831f2f81934d40dd81d52c892d","impliedFormat":1},{"version":"f637ba5370e6cab04d4a0b622517bdf2bea791287fb67282eafa0c07cbe55172","impliedFormat":1},{"version":"502d86bc361f90e6255d35a3b7a58dab4130dd1fd0972731d69190968b65e2ff","impliedFormat":1},{"version":"55e52908b8cd39f6d28862d2786ae205b5ff406c5f1652018fb4f4f2193b6834","impliedFormat":1},{"version":"37be5251e2670095621b9a5108db7e200c26edd88ea86fa95a11439a5f72ca55","impliedFormat":1},{"version":"c6ac9cddacb38c304b4e3e6247b02032039ddc35d27e31d11b74452b73ac366d","impliedFormat":1},{"version":"96cf61a20a43a45d6aecdd774c04b62d56b98b68f5b8281ce9cd9cf99400e650","impliedFormat":1},{"version":"ef5530c5dcbe6787a3329c576e87100e920d6eae1b24ea25988d6758c98fdc88","impliedFormat":1},{"version":"0a7e987533de7a29e57d966b7d0d07f483cf03ba5e4c8a0a0793d6730373cb33","impliedFormat":1},{"version":"a298d8f582d84941168e725933c7116b8089b4967c071e86a231dc4d8aeab415","impliedFormat":1},{"version":"7e0f65da240a84018008f2dba1b00d48ea6d20de8034a071431984f96fb714ae","impliedFormat":1},{"version":"d88f975470fb9352bb5c19b1648e820f070449d109a16598173aecf136341b6d","impliedFormat":1},{"version":"fa833a23d1cecc35c100456a55c3842539d6ae24f9750a33c88dcfc1a248002d","impliedFormat":1},{"version":"8f3b798b039eb617b6195743f0a4bc33cce160ba3550b3713fef422942d812d9","impliedFormat":1},{"version":"7cfcc6812e72d9798d39e9be36ced6c35afdc3d7a31891ca782400b34f43e052","impliedFormat":1},{"version":"d54f0d672071e90edb13875ff3115f21716eb3132b25462e92a74108c25c0d48","impliedFormat":1},{"version":"87efca7cf70fc12e5ff28912f86a28f268f8ddd73a9d33c3ac0f091f09bc111f","impliedFormat":1},{"version":"f194d954a36cb19f15e80ac6730b118e57d85f10c05d4374641a85a19dacd27f","impliedFormat":1},{"version":"cf93e7b09b66e142429611c27ba2cbf330826057e3c793e1e2861e976fae3940","impliedFormat":99},{"version":"90e727d145feb03695693fdc9f165a4dc10684713ee5f6aa81e97a6086faa0f8","impliedFormat":99},{"version":"ee2c6ec73c636c9da5ab4ce9227e5197f55a57241d66ea5828f94b69a4a09a2d","impliedFormat":99},{"version":"afaf64477630c7297e3733765046c95640ab1c63f0dfb3c624691c8445bc3b08","impliedFormat":99},{"version":"5aa03223a53ad03171988820b81a6cae9647eabcebcb987d1284799de978d8e3","impliedFormat":99},{"version":"7f50c8914983009c2b940923d891e621db624ba32968a51db46e0bf480e4e1cb","impliedFormat":99},{"version":"90fc18234b7d2e19d18ac026361aaf2f49d27c98dc30d9f01e033a9c2b01c765","impliedFormat":99},{"version":"a980e4d46239f344eb4d5442b69dcf1d46bd2acac8d908574b5a507181f7e2a1","impliedFormat":99},{"version":"bbbfa4c51cdaa6e2ef7f7be3ae199b319de6b31e3b5afa7e5a2229c14bb2568a","impliedFormat":99},{"version":"bc7bfe8f48fa3067deb3b37d4b511588b01831ba123a785ea81320fe74dd9540","impliedFormat":99},{"version":"fd60c0aaf7c52115f0e7f367d794657ac18dbb257255777406829ab65ca85746","impliedFormat":99},{"version":"15c17866d58a19f4a01a125f3f511567bd1c22235b4fd77bf90c793bf28388c3","impliedFormat":99},{"version":"51301a76264b1e1b4046f803bda44307fba403183bc274fe9e7227252d7315cb","impliedFormat":99},{"version":"ddef23e8ace6c2b2ddf8d8092d30b1dd313743f7ff47b2cbb43f36c395896008","impliedFormat":99},{"version":"9e42df47111429042b5e22561849a512ad5871668097664b8fb06a11640140ac","impliedFormat":99},{"version":"391fcc749c6f94c6c4b7f017c6a6f63296c1c9ae03fa639f99337dddb9cc33fe","impliedFormat":99},{"version":"ac4706eb1fb167b19f336a93989763ab175cd7cc6227b0dcbfa6a7824c6ba59a","impliedFormat":99},{"version":"633220dc1e1a5d0ccf11d3c3e8cadc9124daf80fef468f2ff8186a2775229de3","impliedFormat":99},{"version":"6de22ad73e332e513454f0292275155d6cb77f2f695b73f0744928c4ebb3a128","impliedFormat":99},{"version":"ebe0e3c77f5114b656d857213698fade968cff1b3a681d1868f3cfdd09d63b75","impliedFormat":99},{"version":"22c27a87488a0625657b52b9750122814c2f5582cac971484cda0dcd7a46dc3b","impliedFormat":99},{"version":"7e7a817c8ec57035b2b74df8d5dbcc376a4a60ad870b27ec35463536158e1156","impliedFormat":99},{"version":"0e2061f86ca739f34feae42fd7cce27cc171788d251a587215b33eaec456e786","impliedFormat":99},{"version":"91659b2b090cadffdb593736210910508fc5b77046d4ce180b52580b14b075ec","impliedFormat":99},{"version":"d0f6c657c45faaf576ca1a1dc64484534a8dc74ada36fd57008edc1aab65a02b","impliedFormat":99},{"version":"ce0c52b1ebc023b71d3c1fe974804a2422cf1d85d4af74bb1bced36ff3bff8b5","impliedFormat":99},{"version":"9c6acb4a388887f9a5552eda68987ee5d607152163d72f123193a984c48157c9","impliedFormat":99},{"version":"90d0a9968cbb7048015736299f96a0cceb01cf583fd2e9a9edbc632ac4c81b01","impliedFormat":99},{"version":"49abec0571c941ab6f095885a76828d50498511c03bb326eec62a852e58000c5","impliedFormat":99},{"version":"8eeb4a4ff94460051173d561749539bca870422a6400108903af2fb7a1ffe3d7","impliedFormat":99},{"version":"49e39b284b87452fed1e27ac0748ba698f5a27debe05084bc5066b3ecf4ed762","impliedFormat":99},{"version":"59dcf835762f8df90fba5a3f8ba87941467604041cf127fb456543c793b71456","impliedFormat":99},{"version":"33e0c4c683dcaeb66bedf5bb6cc35798d00ac58d7f3bc82aadb50fa475781d60","impliedFormat":99},{"version":"605839abb6d150b0d83ed3712e1b3ffbeb309e382770e7754085d36bc2d84a4c","impliedFormat":99},{"version":"a862dcb740371257e3dae1ab379b0859edcb5119484f8359a5e6fb405db9e12e","impliedFormat":99},{"version":"0f0a16a0e8037c17e28f537028215e87db047eba52281bd33484d5395402f3c1","impliedFormat":99},{"version":"cf533aed4c455b526ddccbb10dae7cc77e9269c3d7862f9e5cedbd4f5c92e05e","impliedFormat":99},{"version":"f8a60ca31702a0209ef217f8f3b4b32f498813927df2304787ac968c78d8560d","impliedFormat":99},{"version":"530192961885d3ddad87bf9c4390e12689fa29ff515df57f17a57c9125fc77c3","impliedFormat":99},{"version":"165ba9e775dd769749e2177c383d24578e3b212e4774b0a72ad0f6faee103b68","impliedFormat":99},{"version":"61448f238fdfa94e5ccce1f43a7cced5e548b1ea2d957bec5259a6e719378381","impliedFormat":99},{"version":"69fa523e48131ced0a52ab1af36c3a922c5fd7a25e474d82117329fe051f5b85","impliedFormat":99},{"version":"fa10b79cd06f5dd03435e184fb05cc5f0d02713bfb4ee9d343db527501be334c","impliedFormat":99},{"version":"c6fb591e363ee4dea2b102bb721c0921485459df23a2d2171af8354cacef4bce","impliedFormat":99},{"version":"ea7e1f1097c2e61ed6e56fa04a9d7beae9d276d87ac6edb0cd39a3ee649cddfe","impliedFormat":99},{"version":"e8cf2659d87462aae9c7647e2a256ac7dcaf2a565a9681bfb49328a8a52861e8","impliedFormat":99},{"version":"7e374cb98b705d35369b3c15444ef2ff5ff983bd2fbb77a287f7e3240abf208c","impliedFormat":99},{"version":"ca75ba1519f9a426b8c512046ebbad58231d8627678d054008c93c51bc0f3fa5","impliedFormat":99},{"version":"ff63760147d7a60dcfc4ac16e40aa2696d016b9ffe27e296b43655dfa869d66b","impliedFormat":99},{"version":"4d434123b16f46b290982907a4d24675442eb651ca95a5e98e4c274be16f1220","impliedFormat":99},{"version":"57263d6ba38046e85f499f3c0ab518cfaf0a5f5d4f53bdae896d045209ab4aff","impliedFormat":99},{"version":"d3a535f2cd5d17f12b1abf0b19a64e816b90c8c10a030b58f308c0f7f2acfe2c","impliedFormat":99},{"version":"be26d49bb713c13bd737d00ae8a61aa394f0b76bc2d5a1c93c74f59402eb8db3","impliedFormat":99},{"version":"c7012003ac0c9e6c9d3a6418128ddebf6219d904095180d4502b19c42f46a186","impliedFormat":99},{"version":"d58c55750756bcf73f474344e6b4a9376e5381e4ba7d834dc352264b491423b6","impliedFormat":99},{"version":"01e2aabfabe22b4bf6d715fc54d72d32fa860a3bd1faa8974e0d672c4b565dfe","impliedFormat":99},{"version":"ba2c489bb2566c16d28f0500b3d98013917e471c40a4417c03991460cb248e88","impliedFormat":99},{"version":"39f94b619f0844c454a6f912e5d6868d0beb32752587b134c3c858b10ecd7056","impliedFormat":99},{"version":"0d2d8b0477b1cf16b34088e786e9745c3e8145bc8eea5919b700ad054e70a095","impliedFormat":99},{"version":"2a5e963b2b8f33a50bb516215ba54a20801cb379a8e9b1ae0b311e900dc7254c","impliedFormat":99},{"version":"d8307f62b55feeb5858529314761089746dce957d2b8fd919673a4985fa4342a","impliedFormat":99},{"version":"bf449ec80fc692b2703ad03e64ae007b3513ecd507dc2ab77f39be6f578e6f5c","impliedFormat":99},{"version":"f780213dd78998daf2511385dd51abf72905f709c839a9457b6ba2a55df57be7","impliedFormat":99},{"version":"2b7843e8a9a50bdf511de24350b6d429a3ee28430f5e8af7d3599b1e9aa7057f","impliedFormat":99},{"version":"05d95be6e25b4118c2eb28667e784f0b25882f6a8486147788df675c85391ab7","impliedFormat":99},{"version":"62d2721e9f2c9197c3e2e5cffeb2f76c6412121ae155153179049890011eb785","impliedFormat":99},{"version":"ff5668fb7594c02aca5e7ba7be6c238676226e450681ca96b457f4a84898b2d9","impliedFormat":99},{"version":"59fd37ea08657fef36c55ddea879eae550ffe21d7e3a1f8699314a85a30d8ae9","impliedFormat":99},{"version":"84e23663776e080e18b25052eb3459b1a0486b5b19f674d59b96347c0cb7312a","impliedFormat":99},{"version":"43e5934c7355731eec20c5a2aa7a859086f19f60a4e5fcd80e6684228f6fb767","impliedFormat":99},{"version":"a49c210c136c518a7c08325f6058fc648f59f911c41c93de2026db692bba0e47","impliedFormat":99},{"version":"1a92f93597ebc451e9ef4b158653c8d31902de5e6c8a574470ecb6da64932df4","impliedFormat":99},{"version":"256513ad066ac9898a70ca01e6fbdb3898a4e0fe408fbf70608fdc28ac1af224","impliedFormat":99},{"version":"d9835850b6cc05c21e8d85692a8071ebcf167a4382e5e39bf700c4a1e816437e","impliedFormat":99},{"version":"e5ab7190f818442e958d0322191c24c2447ddceae393c4e811e79cda6bd49836","impliedFormat":99},{"version":"91b4b77ef81466ce894f1aade7d35d3589ddd5c9981109d1dea11f55a4b807a0","impliedFormat":99},{"version":"03abb209bed94c8c893d9872639e3789f0282061c7aa6917888965e4047a8b5f","impliedFormat":99},{"version":"e97a07901de562219f5cba545b0945a1540d9663bd9abce66495721af3903eec","impliedFormat":99},{"version":"bf39ed1fdf29bc8178055ec4ff32be6725c1de9f29c252e31bdc71baf5c227e6","impliedFormat":99},{"version":"985eabf06dac7288fc355435b18641282f86107e48334a83605739a1fe82ac15","impliedFormat":99},{"version":"6112d33bcf51e3e6f6a81e419f29580e2f8e773529d53958c7c1c99728d4fb2e","impliedFormat":99},{"version":"89e9f7e87a573504acc2e7e5ad727a110b960330657d1b9a6d3526e77c83d8be","impliedFormat":99},{"version":"44bbb88abe9958c7c417e8687abf65820385191685009cc4b739c2d270cb02e9","impliedFormat":99},{"version":"ab4b506b53d2c4aec4cc00452740c540a0e6abe7778063e95c81a5cd557c19eb","impliedFormat":99},{"version":"858757bde6d615d0d1ee474c972131c6d79c37b0b61897da7fbd7110beb8af12","impliedFormat":99},{"version":"60b9dea33807b086a1b4b4b89f72d5da27ad0dd36d6436a6e306600c47438ac4","impliedFormat":99},{"version":"409c963b1166d0c1d49fdad1dfeb4de27fd2d6662d699009857de9baf43ca7c3","impliedFormat":99},{"version":"b7674ecfeb5753e965404f7b3d31eec8450857d1a23770cb867c82f264f546ab","impliedFormat":99},{"version":"c9800b9a9ad7fcdf74ed8972a5928b66f0e4ff674d55fd038a3b1c076911dcbe","impliedFormat":99},{"version":"99864433e35b24c61f8790d2224428e3b920624c01a6d26ea8b27ee1f62836bb","impliedFormat":99},{"version":"c391317b9ff8f87d28c6bfe4e50ed92e8f8bfab1bb8a03cd1fe104ff13186f83","impliedFormat":99},{"version":"42bdc3c98446fdd528e2591213f71ce6f7008fb9bb12413bd57df60d892a3fb5","impliedFormat":99},{"version":"542d2d689b58c25d39a76312ccaea2fcd10a45fb27b890e18015399c8032e2d9","impliedFormat":99},{"version":"97d1656f0a563dbb361d22b3d7c2487427b0998f347123abd1c69a4991326c96","impliedFormat":99},{"version":"d4f53ed7960c9fba8378af3fa28e3cc483d6c0b48e4a152a83ff0973d507307d","impliedFormat":99},{"version":"0665de5280d65ec32776dc55fb37128e259e60f389cde5b9803cf9e81ad23ce0","impliedFormat":99},{"version":"b6dc8fd1c6092da86725c338ca6c263d1c6dd3073046d3ec4eb2d68515062da2","impliedFormat":99},{"version":"d9198a0f01f00870653347560e10494efeca0bfa2de0988bd5d883a9d2c47edb","impliedFormat":99},{"version":"d4279865b926d7e2cfe8863b2eae270c4c035b6e923af8f9d7e6462d68679e07","impliedFormat":99},{"version":"73b6945448bb3425b764cfe7b1c4b0b56c010cc66e5f438ef320c53e469797eb","impliedFormat":99},{"version":"cf72fd8ffa5395f4f1a26be60246ec79c5a9ad201579c9ba63fd2607b5daf184","impliedFormat":99},{"version":"301a458744666096f84580a78cc3f6e8411f8bab92608cdaa33707546ca2906f","impliedFormat":99},{"version":"711e70c0916ff5f821ea208043ecd3e67ed09434b8a31d5616286802b58ebebe","impliedFormat":99},{"version":"e1f2fd9f88dd0e40c358fbf8c8f992211ab00a699e7d6823579b615b874a8453","impliedFormat":99},{"version":"17db3a9dcb2e1689ff7ace9c94fa110c88da64d69f01dc2f3cec698e4fc7e29e","impliedFormat":99},{"version":"73fb07305106bb18c2230890fcacf910fd1a7a77d93ac12ec40bc04c49ee5b8e","impliedFormat":99},{"version":"2c5f341625a45530b040d59a4bc2bc83824d258985ede10c67005be72d3e21d0","impliedFormat":99},{"version":"c4a262730d4277ecaaf6f6553dabecc84dcca8decaebbf2e16f1df8bbd996397","impliedFormat":99},{"version":"c23c533d85518f3358c55a7f19ab1a05aad290251e8bba0947bd19ea3c259467","impliedFormat":99},{"version":"5d0322a0b8cdc67b8c71e4ccaa30286b0c8453211d4c955a217ac2d3590e911f","impliedFormat":99},{"version":"f5e4032b6e4e116e7fec5b2620a2a35d0b6b8b4a1cc9b94a8e5ee76190153110","impliedFormat":99},{"version":"9ab26cb62a0e86ab7f669c311eb0c4d665457eb70a103508aa39da6ccee663da","impliedFormat":99},{"version":"5f64d1a11d8d4ce2c7ee3b72471df76b82d178a48964a14cdfdc7c5ef7276d70","impliedFormat":99},{"version":"24e2fbc48f65814e691d9377399807b9ec22cd54b51d631ba9e48ee18c5939dd","impliedFormat":99},{"version":"bfa2648b2ee90268c6b6f19e84da3176b4d46329c9ec0555d470e647d0568dfb","impliedFormat":99},{"version":"75ef3cb4e7b3583ba268a094c1bd16ce31023f2c3d1ac36e75ca65aca9721534","impliedFormat":99},{"version":"3be6b3304a81d0301838860fd3b4536c2b93390e785808a1f1a30e4135501514","impliedFormat":99},{"version":"da66c1b3e50ef9908e31ce7a281b137b2db41423c2b143c62524f97a536a53d9","impliedFormat":99},{"version":"3ada1b216e45bb9e32e30d8179a0a95870576fe949c33d9767823ccf4f4f4c97","impliedFormat":99},{"version":"1ace2885dffab849f7c98bffe3d1233260fbf07ee62cb58130167fd67a376a65","impliedFormat":99},{"version":"2126e5989c0ca5194d883cf9e9c10fe3e5224fbd3e4a4a6267677544e8be0aae","impliedFormat":99},{"version":"41a6738cf3c756af74753c5033e95c5b33dfc1f6e1287fa769a1ac4027335bf5","impliedFormat":99},{"version":"6e8630be5b0166cbc9f359b9f9e42801626d64ff1702dcb691af811149766154","impliedFormat":99},{"version":"e36b77c04e00b4a0bb4e1364f2646618a54910c27f6dc3fc558ca2ced8ca5bc5","impliedFormat":99},{"version":"2c4ea7e9f95a558f46c89726d1fedcb525ef649eb755a3d7d5055e22b80c2904","impliedFormat":99},{"version":"4875d65190e789fad05e73abd178297b386806b88b624328222d82e455c0f2e7","impliedFormat":99},{"version":"bf5302ecfaacee37c2316e33703723d62e66590093738c8921773ee30f2ecc38","impliedFormat":99},{"version":"62684064fe034d54b87f62ad416f41b98a405dee4146d0ec03b198c3634ea93c","impliedFormat":99},{"version":"be02cbdb1688c8387f8a76a9c6ed9d75d8bb794ec5b9b1d2ba3339a952a00614","impliedFormat":99},{"version":"cefaff060473a5dbf4939ee1b52eb900f215f8d6249dc7c058d6b869d599983c","impliedFormat":99},{"version":"b2797235a4c1a7442a6f326f28ffb966226c3419399dbb33634b8159af2c712f","impliedFormat":99},{"version":"164d633bbd4329794d329219fc173c3de85d5ad866d44e5b5f0fb60c140e98f2","impliedFormat":99},{"version":"b74300dd0a52eaf564b3757c07d07e1d92def4e3b8708f12eedb40033e4cafe9","impliedFormat":99},{"version":"a792f80b1e265b06dce1783992dbee2b45815a7bdc030782464b8cf982337cf2","impliedFormat":99},{"version":"8816b4b3a87d9b77f0355e616b38ed5054f993cc4c141101297f1914976a94b1","impliedFormat":99},{"version":"0f35e4da974793534c4ca1cdd9491eab6993f8cf47103dadfc048b899ed9b511","impliedFormat":99},{"version":"0ccdfcaebf297ec7b9dde20bbbc8539d5951a3d8aaa40665ca469da27f5a86e1","impliedFormat":99},{"version":"7fcb05c8ce81f05499c7b0488ae02a0a1ac6aebc78c01e9f8c42d98f7ba68140","impliedFormat":99},{"version":"81c376c9e4d227a4629c7fca9dde3bbdfa44bd5bd281aee0ed03801182368dc5","impliedFormat":99},{"version":"0f2448f95110c3714797e4c043bbc539368e9c4c33586d03ecda166aa9908843","impliedFormat":99},{"version":"b2f1a443f7f3982d7325775906b51665fe875c82a62be3528a36184852faa0bb","impliedFormat":99},{"version":"7568ff1f23363d7ee349105eb936e156d61aea8864187a4c5d85c60594b44a25","impliedFormat":99},{"version":"8c4d1d9a4eba4eac69e6da0f599a424b2689aee55a455f0b5a7f27a807e064db","impliedFormat":99},{"version":"e1beb9077c100bdd0fc8e727615f5dae2c6e1207de224569421907072f4ec885","impliedFormat":99},{"version":"3dda13836320ec71b95a68cd3d91a27118b34c05a2bfda3e7e51f1d8ca9b960b","impliedFormat":99},{"version":"fedc79cb91f2b3a14e832d7a8e3d58eb02b5d5411c843fcbdc79e35041316b36","impliedFormat":99},{"version":"99f395322ffae908dcdfbaa2624cc7a2a2cb7b0fbf1a1274aca506f7b57ebcb5","impliedFormat":99},{"version":"5e1f7c43e8d45f2222a5c61cbc88b074f4aaf1ca4b118ac6d6123c858efdcd71","impliedFormat":99},{"version":"7388273ab71cb8f22b3f25ffd8d44a37d5740077c4d87023da25575204d57872","impliedFormat":99},{"version":"0a48ceb01a0fdfc506aa20dfd8a3563edbdeaa53a8333ddf261d2ee87669ea7b","impliedFormat":99},{"version":"3182d06b874f31e8e55f91ea706c85d5f207f16273480f46438781d0bd2a46a1","impliedFormat":99},{"version":"ccd47cab635e8f71693fa4e2bbb7969f559972dae97bd5dbd1bbfee77a63b410","impliedFormat":99},{"version":"89770fa14c037f3dc3882e6c56be1c01bb495c81dec96fa29f868185d9555a5d","impliedFormat":99},{"version":"7048c397f08c54099c52e6b9d90623dc9dc6811ea142f8af3200e40d66a972e1","impliedFormat":99},{"version":"512120cd6f026ce1d3cf686c6ab5da80caa40ef92aa47466ec60ba61a48b5551","impliedFormat":99},{"version":"6cd0cb7f999f221e984157a7640e7871960131f6b221d67e4fdc2a53937c6770","impliedFormat":99},{"version":"f48b84a0884776f1bc5bf0fcf3f69832e97b97dc55d79d7557f344de900d259b","impliedFormat":99},{"version":"dca490d986411644b0f9edf6ea701016836558e8677c150dca8ad315178ec735","impliedFormat":99},{"version":"a028a04948cf98c1233166b48887dad324e8fe424a4be368a287c706d9ccd491","impliedFormat":99},{"version":"3046ed22c701f24272534b293c10cfd17b0f6a89c2ec6014c9a44a90963dfa06","impliedFormat":99},{"version":"394da10397d272f19a324c95bea7492faadf2263da157831e02ae1107bd410f5","impliedFormat":99},{"version":"0580595a99248b2d30d03f2307c50f14eb21716a55beb84dd09d240b1b087a42","impliedFormat":99},{"version":"a7da9510150f36a9bea61513b107b59a423fdff54429ad38547c7475cd390e95","impliedFormat":99},{"version":"659615f96e64361af7127645bb91f287f7b46c5d03bea7371e6e02099226d818","impliedFormat":99},{"version":"1f2a42974920476ce46bb666cd9b3c1b82b2072b66ccd0d775aa960532d78176","impliedFormat":99},{"version":"500b3ae6095cbab92d81de0b40c9129f5524d10ad955643f81fc07d726c5a667","impliedFormat":99},{"version":"a957ad4bd562be0662fb99599dbcf0e16d1631f857e5e1a83a3f3afb6c226059","impliedFormat":99},{"version":"e57a4915266a6a751c6c172e8f30f6df44a495608613e1f1c410196207da9641","impliedFormat":99},{"version":"7a12e57143b7bc5a52a41a8c4e6283a8f8d59a5e302478185fb623a7157fff5e","impliedFormat":99},{"version":"17b3426162e1d9cb0a843e8d04212aabe461d53548e671236de957ed3ae9471b","impliedFormat":99},{"version":"f38e86eb00398d63180210c5090ef6ed065004474361146573f98b3c8a96477d","impliedFormat":99},{"version":"231d9e32382d3971f58325e5a85ba283a2021243651cb650f82f87a1bf62d649","impliedFormat":99},{"version":"6532e3e87b87c95f0771611afce929b5bad9d2c94855b19b29b3246937c9840b","impliedFormat":99},{"version":"65704bbb8f0b55c73871335edd3c9cead7c9f0d4b21f64f5d22d0987c45687f0","impliedFormat":99},{"version":"787232f574af2253ac860f22a445c755d57c73a69a402823ae81ba0dfdd1ce23","impliedFormat":99},{"version":"5e63903cd5ebce02486b91647d951d61a16ad80d65f9c56581cd624f39a66007","impliedFormat":99},{"version":"bcc89a120d8f3c02411f4df6b1d989143c01369314e9b0e04794441e6b078d22","impliedFormat":99},{"version":"d17531ef42b7c76d953f63bd5c5cd927c4723e62a7e0b2badf812d5f35f784eb","impliedFormat":99},{"version":"6d4ee1a8e3a97168ea4c4cc1c68bb61a3fd77134f15c71bb9f3f63df3d26b54c","impliedFormat":99},{"version":"1eb04fea6b47b16922ed79625d90431a8b2fc7ba9d5768b255e62df0c96f1e3a","impliedFormat":99},{"version":"de0c2eece83bd81b8682f4496f558beb728263e17e74cbc4910e5c9ce7bef689","impliedFormat":99},{"version":"98866542d45306dab48ecc3ddd98ee54fa983353bc3139dfbc619df882f54d90","impliedFormat":99},{"version":"9e04c7708917af428c165f1e38536ddb2e8ecd576f55ed11a97442dc34b6b010","impliedFormat":99},{"version":"31fe6f6d02b53c1a7c34b8d8f8c87ee9b6dd4b67f158cbfff3034b4f3f69c409","impliedFormat":99},{"version":"2e1d853f84188e8e002361f4bfdd892ac31c68acaeac426a63cd4ff7abf150d0","impliedFormat":99},{"version":"666b5289ec8a01c4cc0977c62e3fd32e89a8e3fd9e97c8d8fd646f632e63c055","impliedFormat":99},{"version":"a1107bbb2b10982dba1f7958a6a5cf841e1a19d6976d0ecdc4c43269c7b0eaf2","impliedFormat":99},{"version":"07fa6122f7495331f39167ec9e4ebd990146a20f99c16c17bc0a98aa81f63b27","impliedFormat":99},{"version":"39c1483481b35c2123eaab5094a8b548a0c3f1e483ab7338102c3291f1ab18bf","impliedFormat":99},{"version":"b73e6242c13796e7d5fba225bf1c07c8ee66d31b7bb65f45be14226a9ae492d2","impliedFormat":99},{"version":"f2931608d541145d189390d6cfb74e1b1e88f73c0b9a80c4356a4daa7fa5e005","impliedFormat":99},{"version":"8684656fe3bf1425a91bd62b8b455a1c7ec18b074fd695793cfae44ae02e381a","impliedFormat":99},{"version":"ccf0b9057dd65c7fb5e237de34f706966ebc30c6d3669715ed05e76225f54fbd","impliedFormat":99},{"version":"d930f077da575e8ea761e3d644d4c6279e2d847bae2b3ea893bbd572315acc21","impliedFormat":99},{"version":"19b0616946cb615abde72c6d69049f136cc4821b784634771c1d73bec8005f73","impliedFormat":99},{"version":"553312560ad0ef97b344b653931935d6e80840c2de6ab90b8be43cbacf0d04cf","impliedFormat":99},{"version":"1225cf1910667bfd52b4daa9974197c3485f21fe631c3ce9db3b733334199faa","impliedFormat":99},{"version":"f7cb9e46bd6ab9d620d68257b525dbbbbc9b0b148adf500b819d756ebc339de0","impliedFormat":99},{"version":"e46d6c3120aca07ae8ec3189edf518c667d027478810ca67a62431a0fa545434","impliedFormat":99},{"version":"9d234b7d2f662a135d430d3190fc21074325f296273125244b2bf8328b5839a0","impliedFormat":99},{"version":"0554ef14d10acea403348c53436b1dd8d61e7c73ef5872e2fe69cc1c433b02f8","impliedFormat":99},{"version":"2f6ae5538090db60514336bd1441ca208a8fab13108cfa4b311e61eaca5ff716","impliedFormat":99},{"version":"17bf4ce505a4cff88fb56177a8f7eb48aa55c22ccc4cce3e49cc5c8ddc54b07d","impliedFormat":99},{"version":"3d735f493d7da48156b79b4d8a406bf2bbf7e3fe379210d8f7c085028143ee40","impliedFormat":99},{"version":"41de1b3ddd71bd0d9ed7ac217ca1b15b177dd731d5251cde094945c20a715d03","impliedFormat":99},{"version":"17d9c562a46c6a25bc2f317c9b06dd4e8e0368cbe9bdf89be6117aeafd577b36","impliedFormat":99},{"version":"ded799031fe18a0bb5e78be38a6ae168458ff41b6c6542392b009d2abe6a6f32","impliedFormat":99},{"version":"ed48d467a7b25ee1a2769adebc198b647a820e242c96a5f96c1e6c27a40ab131","impliedFormat":99},{"version":"b914114df05f286897a1ae85d2df39cfd98ed8da68754d73cf830159e85ddd15","impliedFormat":99},{"version":"73881e647da3c226f21e0b80e216feaf14a5541a861494c744e9fbe1c3b3a6af","impliedFormat":99},{"version":"d79e1d31b939fa99694f2d6fbdd19870147401dbb3f42214e84c011e7ec359ab","impliedFormat":99},{"version":"4f71097eae7aa37941bab39beb2e53e624321fd341c12cc1d400eb7a805691ff","impliedFormat":99},{"version":"58ebb4f21f3a90dda31a01764462aa617849fdb1b592f3a8d875c85019956aff","impliedFormat":99},{"version":"a8e8d0e6efff70f3c28d3e384f9d64530c7a7596a201e4879a7fd75c7d55cbb5","impliedFormat":99},{"version":"df5cbb80d8353bf0511a4047cc7b8434b0be12e280b6cf3de919d5a3380912c0","impliedFormat":99},{"version":"256eb0520e822b56f720962edd7807ed36abdf7ea23bcadf4a25929a3317c8cf","impliedFormat":99},{"version":"9cf2cbc9ceb5f718c1705f37ce5454f14d3b89f690d9864394963567673c1b5c","impliedFormat":99},{"version":"07d3dd790cf1e66bb6fc9806d014dd40bb2055f8d6ca3811cf0e12f92ba4cb9a","impliedFormat":99},{"version":"1f99fd62e9cff9b50c36f368caf3b9fb79fc6f6c75ca5d3c2ec4afaea08d9109","impliedFormat":99},{"version":"6558faaacba5622ef7f1fdfb843cd967af2c105469b9ff5c18a81ce85178fca7","impliedFormat":99},{"version":"34e7f17ae9395b0269cd3f2f0af10709e6dc975c5b44a36b6b70442dc5e25a38","impliedFormat":99},{"version":"a4295111b54f84c02c27e46b0855b02fad3421ae1d2d7e67ecf16cb49538280a","impliedFormat":99},{"version":"ce9746b2ceae2388b7be9fe1f009dcecbc65f0bdbc16f40c0027fab0fb848c3b","impliedFormat":99},{"version":"35ce823a59f397f0e85295387778f51467cea137d787df385be57a2099752bfb","impliedFormat":99},{"version":"2e5acd3ec67bc309e4f679a70c894f809863c33b9572a8da0b78db403edfa106","impliedFormat":99},{"version":"1872f3fcea0643d5e03b19a19d777704320f857d1be0eb4ee372681357e20c88","impliedFormat":99},{"version":"9689628941205e40dcbb2706d1833bd00ce7510d333b2ef08be24ecbf3eb1a37","impliedFormat":99},{"version":"0317a72a0b63094781476cf1d2d27585d00eb2b0ca62b5287124735912f3d048","impliedFormat":99},{"version":"6ce4c0ab3450a4fff25d60a058a25039cffd03141549589689f5a17055ad0545","impliedFormat":99},{"version":"9153ec7b0577ae77349d2c5e8c5dd57163f41853b80c4fb5ce342c7a431cbe1e","impliedFormat":99},{"version":"f490dfa4619e48edd594a36079950c9fca1230efb3a82aaf325047262ba07379","impliedFormat":99},{"version":"674f00085caff46d2cbc76fc74740fd31f49d53396804558573421e138be0c12","impliedFormat":99},{"version":"41d029194c4811f09b350a1e858143c191073007a9ee836061090ed0143ad94f","impliedFormat":99},{"version":"44a6259ffd6febd8510b9a9b13a700e1d022530d8b33663f0735dbb3bee67b3d","impliedFormat":99},{"version":"6f4322500aff8676d9b8eef7711c7166708d4a0686b792aa4b158e276ed946a7","impliedFormat":99},{"version":"e829ff9ecffa3510d3a4d2c3e4e9b54d4a4ccfef004bacbb1d6919ce3ccca01f","impliedFormat":99},{"version":"62e6fec9dbd012460b47af7e727ec4cd34345b6e4311e781f040e6b640d7f93e","impliedFormat":99},{"version":"4d180dd4d0785f2cd140bc069d56285d0121d95b53e4348feb4f62db2d7035d3","impliedFormat":99},{"version":"f1142cbba31d7f492d2e7c91d82211a8334e6642efe52b71d9a82cb95ba4e8ae","impliedFormat":99},{"version":"279cac827be5d48c0f69fe319dc38c876fdd076b66995d9779c43558552d8a50","impliedFormat":99},{"version":"a70ff3c65dc0e7213bfe0d81c072951db9f5b1e640eb66c1eaed0737879c797b","impliedFormat":99},{"version":"f75d3303c1750f4fdacd23354657eca09aae16122c344e65b8c14c570ff67df5","impliedFormat":99},{"version":"3ebae6a418229d4b303f8e0fdb14de83f39fba9f57b39d5f213398bca72137c7","impliedFormat":99},{"version":"21ba07e33265f59d52dece5ac44f933b2b464059514587e64ad5182ddf34a9b0","impliedFormat":99},{"version":"2d3d96efba00493059c460fd55e6206b0667fc2e73215c4f1a9eb559b550021f","impliedFormat":99},{"version":"d23d4a57fff5cec5607521ba3b72f372e3d735d0f6b11a4681655b0bdd0505f4","impliedFormat":99},{"version":"395c1f3da7e9c87097c8095acbb361541480bf5fd7fa92523985019fef7761dd","impliedFormat":99},{"version":"d61f3d719293c2f92a04ba73d08536940805938ecab89ac35ceabc8a48ccb648","impliedFormat":99},{"version":"ca693235a1242bcd97254f43a17592aa84af66ccb7497333ccfea54842fde648","impliedFormat":99},{"version":"cd41cf040b2e368382f2382ec9145824777233730e3965e9a7ba4523a6a4698e","impliedFormat":99},{"version":"2e7a9dba6512b0310c037a28d27330520904cf5063ca19f034b74ad280dbfe71","impliedFormat":99},{"version":"9f2a38baf702e6cb98e0392fa39d25a64c41457a827b935b366c5e0980a6a667","impliedFormat":99},{"version":"c1dc37f0e7252928f73d03b0d6b46feb26dea3d8737a531ca4c0ec4105e33120","impliedFormat":99},{"version":"25126b80243fb499517e94fc5afe5c9c5df3a0105618e33581fb5b2f2622f342","impliedFormat":99},{"version":"d332c2ddcb64012290eb14753c1b49fe3eee9ca067204efba1cf31c1ce1ee020","impliedFormat":99},{"version":"1be8da453470021f6fe936ba19ee0bfebc7cfa2406953fa56e78940467c90769","impliedFormat":99},{"version":"7c9f2d62d83f1292a183a44fb7fb1f16eb9037deb05691d307d4017ac8af850a","impliedFormat":99},{"version":"d0163ab7b0de6e23b8562af8b5b4adea4182884ca7543488f7ac2a3478f3ae6e","impliedFormat":99},{"version":"05224e15c6e51c4c6cd08c65f0766723f6b39165534b67546076c226661db691","impliedFormat":99},{"version":"a5f7158823c7700dd9fc1843a94b9edc309180c969fbfa6d591aeb0b33d3b514","impliedFormat":99},{"version":"7d30937f8cf9bb0d4b2c2a8fb56a415d7ef393f6252b24e4863f3d7b84285724","impliedFormat":99},{"version":"e04d074584483dc9c59341f9f36c7220f16eed09f7af1fa3ef9c64c26095faec","impliedFormat":99},{"version":"619697e06cbc2c77edda949a83a62047e777efacde1433e895b904fe4877c650","impliedFormat":99},{"version":"88d9a8593d2e6aee67f7b15a25bda62652c77be72b79afbee52bea61d5ffb39e","impliedFormat":99},{"version":"044d7acfc9bd1af21951e32252cf8f3a11c8b35a704169115ddcbde9fd717de2","impliedFormat":99},{"version":"a4ca8f13a91bd80e6d7a4f013b8a9e156fbf579bbec981fe724dad38719cfe01","impliedFormat":99},{"version":"5a216426a68418e37e55c7a4366bc50efc99bda9dc361eae94d7e336da96c027","impliedFormat":99},{"version":"13b65b640306755096d304e76d4a237d21103de88b474634f7ae13a2fac722d5","impliedFormat":99},{"version":"7478bd43e449d3ce4e94f3ed1105c65007b21f078b3a791ea5d2c47b30ea6962","impliedFormat":99},{"version":"601d3e8e71b7d6a24fc003aca9989a6c25fa2b3755df196fd0aaee709d190303","impliedFormat":99},{"version":"168e0850fcc94011e4477e31eca81a8a8a71e1aed66d056b7b50196b877e86c8","impliedFormat":99},{"version":"37ba82d63f5f8c6b4fc9b756f24902e47f62ea66aae07e89ace445a54190a86e","impliedFormat":99},{"version":"f5b66b855f0496bc05f1cd9ba51a6a9de3d989b24aa36f6017257f01c8b65a9f","impliedFormat":99},{"version":"823b16d378e8456fcc5503d6253c8b13659be44435151c6b9f140c4a38ec98c1","impliedFormat":99},{"version":"b58b254bf1b586222844c04b3cdec396e16c811463bf187615bb0a1584beb100","impliedFormat":99},{"version":"a367c2ccfb2460e222c5d10d304e980bd172dd668bcc02f6c2ff626e71e90d75","impliedFormat":99},{"version":"0718623262ac94b016cb0cfd8d54e4d5b7b1d3941c01d85cf95c25ec1ba5ed8d","impliedFormat":99},{"version":"d4f3c9a0bd129e9c7cbfac02b6647e34718a2b81a414d914e8bd6b76341172e0","impliedFormat":99},{"version":"824306df6196f1e0222ff775c8023d399091ada2f10f2995ce53f5e3d4aff7a4","impliedFormat":99},{"version":"84ca07a8d57f1a6ba8c0cf264180d681f7afae995631c6ca9f2b85ec6ee06c0f","impliedFormat":99},{"version":"35755e61e9f4ec82d059efdbe3d1abcccc97a8a839f1dbf2e73ac1965f266847","impliedFormat":99},{"version":"64a918a5aa97a37400ec085ffeea12a14211aa799cd34e5dc828beb1806e95bb","impliedFormat":99},{"version":"0c8f5489ba6af02a4b1d5ba280e7badd58f30dc8eb716113b679e9d7c31185e5","impliedFormat":99},{"version":"7b574ca9ae0417203cdfa621ab1585de5b90c4bc6eea77a465b2eb8b92aa5380","impliedFormat":99},{"version":"3334c03c15102700973e3e334954ac1dffb7be7704c67cc272822d5895215c93","impliedFormat":99},{"version":"aabcb169451df7f78eb43567fab877a74d134a0a6d9850aa58b38321374ab7c0","impliedFormat":99},{"version":"1b5effdd8b4e8d9897fc34ab4cd708a446bf79db4cb9a3467e4a30d55b502e14","impliedFormat":99},{"version":"d772776a7aea246fd72c5818de72c3654f556b2cf0d73b90930c9c187cc055fc","impliedFormat":99},{"version":"dbd4bd62f433f14a419e4c6130075199eb15f2812d2d8e7c9e1f297f4daac788","impliedFormat":99},{"version":"427df949f5f10c73bcc77b2999893bc66c17579ad073ee5f5270a2b30651c873","impliedFormat":99},{"version":"c4c1a5565b9b85abfa1d663ca386d959d55361e801e8d49155a14dd6ca41abe1","impliedFormat":99},{"version":"7a45a45c277686aaff716db75a8157d0458a0d854bacf072c47fee3d499d7a99","impliedFormat":99},{"version":"57005b72bce2dc26293e8924f9c6be7ee3a2c1b71028a680f329762fa4439354","impliedFormat":99},{"version":"8f53b1f97c53c3573c16d0225ee3187d22f14f01421e3c6da1a26a1aace32356","impliedFormat":99},{"version":"810fdc0e554ed7315c723b91f6fa6ef3a6859b943b4cd82879641563b0e6c390","impliedFormat":99},{"version":"87a36b177b04d23214aa4502a0011cd65079e208cd60654aefc47d0d65da68ea","impliedFormat":99},{"version":"28a1c17fcbb9e66d7193caca68bbd12115518f186d90fc729a71869f96e2c07b","impliedFormat":99},{"version":"cc2d2abbb1cc7d6453c6fee760b04a516aa425187d65e296a8aacff66a49598a","impliedFormat":99},{"version":"d2413645bc4ab9c3f3688c5281232e6538684e84b49a57d8a1a8b2e5cf9f2041","impliedFormat":99},{"version":"4e6e21a0f9718282d342e66c83b2cd9aa7cd777dfcf2abd93552da694103b3dc","impliedFormat":99},{"version":"9006cc15c3a35e49508598a51664aa34ae59fc7ab32d6cc6ea2ec68d1c39448e","impliedFormat":99},{"version":"74467b184eadee6186a17cac579938d62eceb6d89c923ae67d058e2bcded254e","impliedFormat":99},{"version":"4169b96bb6309a2619f16d17307da341758da2917ff40c615568217b14357f5e","impliedFormat":99},{"version":"4a94d6146b38050de0830019a1c6a7820c2e2b90eba1a5ee4e4ab3bc30a72036","impliedFormat":99},{"version":"48a35ece156203abf19864daa984475055bbed4dc9049d07f4462100363f1e85","impliedFormat":99},{"version":"2a80ab285da5ec06299594edb456abd51ee69a7506278cca24e1ab494a86952b","impliedFormat":99},{"version":"d7c334ef4c10e9f7c8ebed40342b311ae77de6e80febf22a23927c774957b2ec","impliedFormat":1},{"version":"201688a543bd945e4cb8c9affe99e801fcd97b5dc27080b45fa5653a91f02c30","impliedFormat":99},{"version":"39bdb75d428f49bafbbb4ebd79d48a019c8912e31906ef676e88e6d98b4a62c0","impliedFormat":99},{"version":"015af3f63dc78f5e0219debe1e00649f77877327ef539fbab9a5bb1cbb0f1379","impliedFormat":1},{"version":"486057fe8c8d495fb331e7d6c52524888ba890364993153fabf53b1c870ea10f","impliedFormat":1},{"version":"2639085533befdc499c15a8b9f4087fab12eb1a579cc3bd3008222f6be7f9a1f","impliedFormat":1},{"version":"c48f61fc0470c3437ee79f736ca4cb8d478868377e5993dd5cf2c4f153f3fb13","impliedFormat":1},{"version":"bbd033845ce7f8dcbee73a6cbabfa50f6aa96293c7463d48da286b269db587ae","impliedFormat":1},{"version":"d2530a27db1ad726ee2406fa9f67ac32fd8cb359f593e062ff9aad8e9030d09f","impliedFormat":1},{"version":"309a5306c6c1b394938c1fa863ff14fa0e7532688c962a3a8521f0bda102382a","impliedFormat":1},{"version":"e532e8e4ac90ec48d8ea80c54e6360da6be10b56acd76872e53141275d6e0f59","impliedFormat":1},{"version":"331c422934e75dace7f30568554bb7bfe3ca79023c129071f695148404e3e6ce","impliedFormat":1},{"version":"62d760313c4b8b2f610f6c9732ec500ab012a2ef3d2888eef5e67b80eefcbaea","impliedFormat":1},{"version":"d79afb98e94f37cc3b0afbd9cc742b6ed802c230c7e34cef67827a1d57bf2908","impliedFormat":1},{"version":"7d979e73309901b0e93eedaf96ee968c4819e15a31aa8bf891343d93492441ce","impliedFormat":1},{"version":"48bb97ed124a6baf3ec6f65571e68c1a7c53334f4d26f50d99b7cfc0165bca9c","impliedFormat":1},{"version":"20e3a2aebe3815579fab8a8549706c23f70683b6139f6bb5e899d5d96a0e1225","impliedFormat":1},{"version":"4fa1ec89a0fbf7ea9ed432144b1f04021f7275c37d439c02306184b96f430dd1","impliedFormat":1},{"version":"50c42f4c9693d4d18af70f9e768e2a48cc166044209ee8c7e275c3f89bd63c70","impliedFormat":1},{"version":"9f7c68ac36cad40ed178aab8a954b114c8e940258f919d30b9b9ba76c09a50e6","impliedFormat":1},{"version":"697590086f6e294d5b1625b2ef259559f9799c3cff1d5ac424f35988ca8975f4","impliedFormat":1},{"version":"11be2635c1b3bd67cf734fd47fce489d2448e66ea4617b71a21be8f8bb9557a0","impliedFormat":1},{"version":"ab0309363c9030c31c8beebc112301006bb080a926ecac106dc9dca8cddd20a9","impliedFormat":1},{"version":"70a29119482d358ab4f28d28ee2dcd05d6cbf8e678068855d016e10a9256ec12","impliedFormat":1},{"version":"869ac759ae8f304536d609082732cb025a08dcc38237fe619caf3fcdd41dde6f","impliedFormat":1},{"version":"0ea900fe6565f9133e06bce92e3e9a4b5a69234e83d40b7df2e1752b8d2b5002","impliedFormat":1},{"version":"e5408f95ca9ac5997c0fea772d68b1bf390e16c2a8cad62858553409f2b12412","impliedFormat":1},{"version":"3c1332a48695617fc5c8a1aead8f09758c2e73018bd139882283fb5a5b8536a6","impliedFormat":1},{"version":"9260b03453970e98ce9b1ad851275acd9c7d213c26c7d86bae096e8e9db4e62b","impliedFormat":1},{"version":"083838d2f5fea0c28f02ce67087101f43bd6e8697c51fd48029261653095080c","impliedFormat":1},{"version":"969132719f0f5822e669f6da7bd58ea0eb47f7899c1db854f8f06379f753b365","impliedFormat":1},{"version":"94ca5d43ff6f9dc8b1812b0770b761392e6eac1948d99d2da443dc63c32b2ec1","impliedFormat":1},{"version":"2cbc88cf54c50e74ee5642c12217e6fd5415e1b35232d5666d53418bae210b3b","impliedFormat":1},{"version":"ccb226557417c606f8b1bba85d178f4bcea3f8ae67b0e86292709a634a1d389d","impliedFormat":1},{"version":"5ea98f44cc9de1fe05d037afe4813f3dcd3a8c5de43bdd7db24624a364fad8e6","impliedFormat":1},{"version":"5260a62a7d326565c7b42293ed427e4186b9d43d6f160f50e134a18385970d02","impliedFormat":1},{"version":"0b3fc2d2d41ad187962c43cb38117d0aee0d3d515c8a6750aaea467da76b42aa","impliedFormat":1},{"version":"ed219f328224100dad91505388453a8c24a97367d1bc13dcec82c72ab13012b7","impliedFormat":1},{"version":"6847b17c96eb44634daa112849db0c9ade344fe23e6ced190b7eeb862beca9f4","impliedFormat":1},{"version":"d479a5128f27f63b58d57a61e062bd68fa43b684271449a73a4d3e3666a599a7","impliedFormat":1},{"version":"6f308b141358ac799edc3e83e887441852205dc1348310d30b62c69438b93ca0","impliedFormat":1},{"version":"11928e29593cb960a3f96eae627d671bc2f2170d7e0a75622e49cef01622fe46","impliedFormat":1},{"version":"20cc41f51c8ff33d21fb79e8e97b985f5a609bf1451f70cc3ce83e6d5f965ab8","impliedFormat":1},{"version":"3289840aa1a3d57da672099a7f14afbc8ef8bf0dd6e2d243c1aff336196ee4f4","impliedFormat":1},{"version":"9af44a67ddc3ee8dec8a5087f3f5551d771a9bbb28c859ab6e39cbbfeef1486a","impliedFormat":1},{"version":"5ab9a9cccf1c561c6f567977ea85eaae51ebe908069f36fb6c35b8d901ab4058","impliedFormat":1},{"version":"0064748c8fb148e24cd533817dec1ae7b42b1aefcce5c69f7462a55c25bdb9f0","impliedFormat":1},{"version":"5cb0311f0b2f20978411aa8dd28124aa7419c0ab5ea4bef73a2b0310938f52d6","impliedFormat":1},{"version":"e6c940a7a05214c36c7f9c383dcd6ebd345d1c87ab06a10d38163e50b9a681f1","impliedFormat":1},{"version":"d362ff2cedbe3e9ba605cadcb2190bc6bf50c163267071b8ac3a6c8d84317f78","impliedFormat":1},{"version":"df805cd98531520aed08a1b485e17e5a69892c7ead5583a0a301d92cfb80714f","impliedFormat":1},{"version":"57b5763182f9cabb6e31c735665668f8c131f3c7d1aa2b880c40dcbcb34d4ee9","impliedFormat":1},{"version":"a19828b49ac566575268aab52fd7dc0c4e58d77d043dd1c83f82ae8d8b9874d0","impliedFormat":1},{"version":"fa1421553ab8ddba9ce3d8af27741e188e9f8c773b84fa54a05658be564cf6f4","impliedFormat":1},{"version":"eafc9af1fa28dc82ee9e41d81fef98ab08078d8e7de6ac286e458eca3e4b0e98","impliedFormat":1},{"version":"5faebccb33e83ed47d6652b4eb41e3cb6e57f66c9e8740e78c8dc2d6ece62bf6","impliedFormat":1},{"version":"f0cbc9019c7953282a1210dc4e47771caaafdaae8cdd9d6b666a4ec8bd67c914","impliedFormat":1},{"version":"93650916d98eab24b6ea86f2f79731c5fd9578acab81176f1a576bcfcddcd970","impliedFormat":1},{"version":"1bf980acccc086cf3469896843e8df2fd1711a98ce37fc5133c1c5739722647b","impliedFormat":1},{"version":"baabe118c17f263b0a356c34802898eccd3f7ca40b96997aceffe1e35e22cc49","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"d8811e82b5bf65e4f839071467bc752d45d52289f2c2e49ee56de51209051ed1","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"7010271cc20a1bab3f96b8ed9df55a2d5281d588432343bf656d3d46fb3b6e92","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"7010271cc20a1bab3f96b8ed9df55a2d5281d588432343bf656d3d46fb3b6e92","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"8c95ed06561efa2ef61a233502be995190f3492d3cde7643aabcc4fc80888153","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"7010271cc20a1bab3f96b8ed9df55a2d5281d588432343bf656d3d46fb3b6e92","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"dcd3a1a5b14e905d2c14c0304e03b4239277536406701c36331130710974af97","impliedFormat":1},{"version":"7e176b34473a960c96ab4688774b371d348534ccbc7de76bf218c96a706eb441","impliedFormat":1},{"version":"12895ea8bfe211b655fd579c833d21caaefb55fbc8b0d042f651cfb8f8424286","impliedFormat":1},{"version":"245000cdaa0e0f759e45745d7dac85c90f929bd6ccc16457703c362259dcb0d9","impliedFormat":1},{"version":"b30047932ac48c6a8c61ba49baa29d8066148462489fb752cd54d4c07938da7a","impliedFormat":1},{"version":"eb91981d121da4c3599e678f2d161d7785e4a484e26debd4bbf76793bdc9ae44","impliedFormat":1},{"version":"0eedef2ce9102ec35928c757e3cf27e09f3ca04f3bb7d4a32123f2fe7ea37e30","impliedFormat":1},{"version":"b9b8f1f897989e30f4c91f18990cf1828dc0832532c5479502606ca52a25658f","impliedFormat":1},{"version":"b24f299d182f14a7f88c6c90f7d654c1c85eb6d3813479e182154d35cb49c809","impliedFormat":1},{"version":"e1f1b1c8b61cead248779c6a541e637a368bdf5cfae5bf4c4a8accad2a500054","impliedFormat":1},{"version":"6af0479ea02058353cd8414c6c6f36adf61ee0516864c930a6187e8ccfce49e6","impliedFormat":1},{"version":"1eebb499f94f45857b355e3865503a671eb9f1955987701b2492f9ebbb19ee35","impliedFormat":1},{"version":"5c0254455343a2164c7d7a6c1d43c2319d329edd8177b4567054bd9cc18bf083","impliedFormat":1},{"version":"d1496a79ffc3e1c5f8898817c5f87efe3070f3f6bfdcf3c13ec12f9141cce565","impliedFormat":1},{"version":"f5d0ab6a6b996911c87a781d43bddb86c19b3332d47ba05c8978c1984700dfa9","impliedFormat":1},{"version":"fa820e260726225d1692a06cef6e1d915c3e8a41de7e9e6a1d4575d0f85121ef","impliedFormat":1},{"version":"d1d949485ad8b723a439d4fbfba00cdf9c20928e9de72bac4061173eedb7246e","impliedFormat":1},{"version":"e60233856285c83d8337d2272081ea908c16ac12fc4040c977a8ab11c749bcaa","impliedFormat":1},{"version":"44b381acba23994aca7f6904680093716baab24e476b3fe9e9cbae8e8c47944d","impliedFormat":1},{"version":"09e058a6d706073073c018ee3c9f0a1ad393a437ef18a325c1ae85cb29d34cc5","impliedFormat":1},{"version":"90250a0987fc980d117820d9e1c89c0f7656a15e297dc15d392e87dbd97ada83","impliedFormat":1},{"version":"2b4276dde46aa2faf0dd86119999c76b81e6488cd6b0d0fcf9fb985769cd11c0","impliedFormat":99},{"version":"38d4cff03e87dc58bfd50ffe5a3fb25e6e6d4136a1282883285baf71d35967c5","impliedFormat":99},{"version":"5ecea63968444d55f7c3cf677cbec9525db9229953b34f06be0386a24b0fffd2","impliedFormat":99},{"version":"6ea9c8bf2ae4d47a0dbc2a1f9ac1e36c639b2ac9225c4d271c2f63a2faf24831","impliedFormat":99},{"version":"ce7ce51836fd2f508b0bcddcaa0b8b780da883d7a1239e17538feca295409eaf","impliedFormat":1},{"version":"9e5a833bfb54b4a3370486188a3d12e134c5b29b3364dade3a81b9451ddffd1e","impliedFormat":1},{"version":"b7f70ef6d1a9ce25d100f75f1288c2c444fde889f5caeb2c8a49f70194f44da6","impliedFormat":1},{"version":"4d09be69ea360a371a6cffc15f02f9f159bd64507c6d457133a73f663e41c25f","impliedFormat":1},{"version":"49838f8f6ed3a2653c01022f7e8a58ab5e560d73064303fbdea7b3eafee42287","impliedFormat":1},{"version":"334b9c6b47c119e7d44beb54ac4205db17dc6b24794e4f06e04a68711954d863","impliedFormat":1},{"version":"e14bebaab3c57f3268f92aa47423b225061c40524d337bf86d16936b924c7977","impliedFormat":1},{"version":"a439861fe62f996adf814884947650650fc436898af722e1918e328349fd6417","impliedFormat":1},{"version":"d8f2d457913790a6059dc6ee295aa9a0eb1b7754fea88c24fcfaebc9680cf7f0","impliedFormat":1},{"version":"260a47ebfd3a752a1230a7058c64fc381e4a6a8bc96f7bb7dabbf7af87202976","impliedFormat":1},{"version":"6fdf0d3132926f10124404134840fa72fe00870da3328e349b8060940382c2f9","impliedFormat":1},{"version":"bedf7e7e31a641654db1a556fb77dcc15180f19514fb0d2ed39f157cb0fc301a","impliedFormat":1},{"version":"d1362b8db27eb8fa56916a4e7875fc8a025a759f71865b424c5c0b5ad91ce73f","impliedFormat":1},{"version":"25c4f1af91513fa2c2423d43589c40145b1047b52c075dc58bdc42c2bc41bcb4","impliedFormat":1},{"version":"070eca51dd0a478ddd7cc1cf23c31f4a40ff1fee9465d2d354fedac657ccb2dc","impliedFormat":1},{"version":"91b487cd1a6e7607465a977fdcdf339d8c6225900a1d213dd41936ca3d048836","impliedFormat":1},{"version":"af28cd496b08df6780b3303a74b1d3db3064d8bba9293cc815e92291fc160805","impliedFormat":1},{"version":"ca0fe4ef002f68456b7f92ef4686ef098854137cd58bfcaec7f9ae191148bf1d","impliedFormat":1},{"version":"9330046da4d6724db3c7ef4655b01545f69f12ea9b0eb74d498512244be94727","impliedFormat":1},{"version":"a879c9b09499eecb06df95a87ac084f699e125532ff4f7267ec57ea0da8642bb","impliedFormat":1},{"version":"cea6f3dbab165b13ee7094a5c688d656b411eb0c599a3f8e67f2dbbc53b5663f","impliedFormat":1},{"version":"5b9eb0b64742b99fa2bfab2d1256e99219fbdcea283fc33a36baee703ef3d757","impliedFormat":1},{"version":"f73c97ee355afdb250266e82f79e6d987d23d9a84273b17857c3e61114a76568","impliedFormat":1},{"version":"7c5834846a2e40307b2afdf9cc4d7aac1b16df7f1ddb101307273efb9ed8626f","impliedFormat":1},{"version":"e5cb8515e1b89e67f61ce60306635456dc0ade7e3ee4c1a21ef318d3b543eec9","impliedFormat":1},{"version":"0fbb5ef40d55bfb6f7a5c2dfc74211bbc610a3ee1eb421185d3e9a322f69a142","impliedFormat":1},{"version":"c225b50585f0fc6f4687b62f5511881df9f3d063f60f2f3af727dff2e690d519","impliedFormat":1},{"version":"0331c6f3ea4740df86020283f0ff05cc4bc755e6310bfc9cbdc10c0b27c2c08f","impliedFormat":1},{"version":"5662a627ac042ee96e4627f855f76b08bdcdacb6f5c546a6692fe4629dbfd1af","impliedFormat":1},{"version":"ed673eb6be36e1804151a1e42478c83dd0b92e0cc265bad9dfddb3abe51002e1","impliedFormat":1},{"version":"0485ef83541c8cc016daa28f7ebe980f698d903151dc50a7efe7ddf023815681","impliedFormat":1},{"version":"1c906055b32d01ec3c6ffd245d9f5d5d2387de23a9026e6849c35729d5d1252c","impliedFormat":1},{"version":"aaa7fec72a5ded92db87991af37956fc8255e9b8da4d9165445edb6e5ada22c4","impliedFormat":1},{"version":"6acc9e5761737d08a7e163c43d2ac814eb63ab1d6450594e9ce8e66f49e1eddb","impliedFormat":1},{"version":"c4aacb40f647365929a82cddb1e51fea7c8b530183ffad74382c9648c03b56a4","impliedFormat":1},{"version":"8c1bd8efad0300b1d4a652fb5aa1f958931d9009c9ce89d98019d7a8b55dd757","impliedFormat":1},{"version":"0e1a8479fd2c48803a987f637ebb64089c526b8e53d7974160204e6dadd8ef94","impliedFormat":1},{"version":"b9d6eb16792ce9cb9229c083db7c9dad07e4d598ecf3a891933942e7ad1fb070","impliedFormat":1},{"version":"cf75c3422ccc5362f4911467a896f4f77f7cc1bcfdd074046efcb3130ebdb8e4","impliedFormat":1},{"version":"2e0d32660751155f11c422e203181d899fb70685334dd688c17d158f31b5b0ea","impliedFormat":1},{"version":"3992ab15b523b97d436a282b1df2f2b9f20c9ef9e44d0c23956c25aca77d2076","impliedFormat":1},{"version":"68744a94adb00cff7991566d8b0467fdcadd642c7221ce963c8de8f730c47251","impliedFormat":1},{"version":"859d3d75d172b559d96b45b16b260905984693ec0798a2062211542355858498","impliedFormat":1},{"version":"b8070a737ec60850d4f04568a45665a2cdc692a6ea7545d7c9ac6c8a25d54b38","impliedFormat":1},{"version":"b4ea4a558b069b4035bbc2bdebc370205266a830dcf1c90cb7ead22da288d074","impliedFormat":1},{"version":"5a39278b38da2df895e9e2e6fffa33f50c32516732275e62fcad0d5f2b50acc4","impliedFormat":1},{"version":"aaef2354583399610f0cfffd6683fa200f43f9055bd4dfc8c9bcdbba89c93aaa","impliedFormat":1},{"version":"fdd33dc882f735aeac4e1c6ccde0b8d25b07b1caa7e560adcde7fde1df1e8e59","impliedFormat":1},{"version":"4ef318a4a4e1e127d7bd4c7099f61e5e38487b0164aad0eae92794de0e220a5f","impliedFormat":1},{"version":"73a0ee6395819b063df4b148211985f2e1442945c1a057204cf4cf6281760dc3","affectsGlobalScope":true,"impliedFormat":1},{"version":"d05d8c67116dceafc62e691c47ac89f8f10cf7313cd1b2fb4fe801c2bf1bb1a7","impliedFormat":1},{"version":"3c5bb5207df7095882400323d692957e90ec17323ccff5fd5f29a1ecf3b165d0","impliedFormat":1},{"version":"befa24d0fe8eb1c15032e835c25acb8ae19ae101b55891226786b78884036440","impliedFormat":1},{"version":"431384f165550e249a024da1e4f5ecf67a9ab9bd80824b9198b991600442c0df","impliedFormat":1},{"version":"4300901bc259f4793bbae2d30b57367e6cf28873a8b59a35ec466cf5141bc71e","impliedFormat":1},{"version":"a5cdab3f89ea55f22485d6c6396b9477b8fddffb8096d869a2c3eb6a0e9f339b","impliedFormat":1},{"version":"0f45810ad7155f5cf85c3b99d8837fae35bef7d711f122a362bdbf9e30484cff","impliedFormat":1},{"version":"d12a37c3bbf382d20cdafe0f214cd2aa06cdc45a1753bf975ea44595b8852486","impliedFormat":1},{"version":"3f11a6347ba9d4ff1810cd6e8724295f2b5b92226279e33288f0b81c06854b11","impliedFormat":1},{"version":"8709b29708d70d23bd2f6bee7439d1d63aadd3bbbbbac60ecc49cfd114492b83","impliedFormat":1},{"version":"63603b74a5c670f0b329da6cae9613e71315ec3a663a5460d9892a24ae63fce8","impliedFormat":1},{"version":"474597287b297a39012f8b0fa009e7804716ed3d98b4f6762e62c6af03edbaae","impliedFormat":1},{"version":"3da5744f338a502b7a30a8f7d2aeb8dabe9f291be198e2589f0ee6eb462b6c49","impliedFormat":1},{"version":"c1c5dfcacaef9132803b17ea1cf5f2053712379342c872e4aaefd53141c556cc","impliedFormat":1},{"version":"1eec8cf56d2093c649743c7697af7492818af939a54f9abf98ccad3403232a2c","impliedFormat":1},{"version":"9b72b48165071801b8ca583e8d0a54171628e6ab6b30a6bd18878add23fe0cda","impliedFormat":1},{"version":"7f49c8e8cfe9d10753fc2d20dcba79fd7b28100248c8604daf1fbc787582da5f","impliedFormat":1},{"version":"704243b2f7a509a2f624ab1134a5601f821a39e1c9f1409e0a28eb06e98ac49a","impliedFormat":1},{"version":"d2456be08bf14016213e583c1ef6f8b7862ee1945073418ba333332c2a387bd9","impliedFormat":1},{"version":"b92ad137770ccbe702dd1cee2cec758cc420aae8650c89634c2125caf569041b","impliedFormat":1},{"version":"1add518ade30764380038c2d9aa0ec37d7928dbccae9ac123c4f8ea0c7f7932a","impliedFormat":1},{"version":"5bcbeb26010db8f17f012b0e77790f082c316a346f53d4ed75c342b14e69c8e6","impliedFormat":1},{"version":"3c799e898646a0555a7985f291b5064b7f335681f4ee3a796ea6deff8a73ab13","impliedFormat":1},{"version":"3ea3feea868f4f946bf6716b08886c2d0a22fd6c189bc9ffac2e8b31a9ddcdde","impliedFormat":1},{"version":"64c6e64233faa6e3b585f7b49794a4e8a9d0179273cda83e7b14aabcf6f113c1","impliedFormat":1},{"version":"07ceab1b624380efa77e39a01059bee7a792c94b5dd25baf13f1251efd2f4998","impliedFormat":1},{"version":"fd006bbb36d0cc0fbb782e0412404db082ebd1ac6800fb4b45bb224feaf83cac","impliedFormat":1},{"version":"3f72825d097b9c4ab66e25d105ad242d564391d77046861efaa361b1c7f19f69","impliedFormat":1},{"version":"9858d6b1cd99022bdd06174633253e7ccacf1ed62a15adc91ba148293f9804d8","impliedFormat":1},{"version":"4aa8fe27a526a30d218700ec9e5c09032ab40bf0a18cb4fc4b05f773a1e346ca","impliedFormat":1},{"version":"0597858092c8c1c38653961b31ef9e1550a4cba33da9b03e0b26a424b9d565f6","impliedFormat":1},{"version":"e1e73fab0b8967e5849fcfc6c7de0303614410ee427edae0e36053ecc2533548","impliedFormat":1},{"version":"21316facbb79ba139743466ee6194f3b8f9ba797a2b55af86587161533b46b06","impliedFormat":1},{"version":"17217ee1c357567b7a3a16bb2e179ef01dd41fd28fff1558739bc340577f10fb","impliedFormat":1},{"version":"5a25f38411dcb5454f5c65110b4f6ec13af072cdf8febaea3829057f91ccd332","impliedFormat":1},{"version":"fd3170f4e448620561e53ac9e6447b35380d19ca9bcad219aab7e9add85a7187","impliedFormat":1},{"version":"f476947becc7ea284038fa40c427377d093c965ba93c5fd41f97b13b5045a1de","impliedFormat":1},{"version":"53407709f23c0357090d046b42f584cfff0d53696f0069bfe8469132b6142bfb","impliedFormat":1},{"version":"90a1100f09a52b5910bbb6a99b2e38f401b12de60f62af0afc7d034cf993b631","impliedFormat":1},{"version":"001dfa751f23df81842cdb8c26d561075c5802fc533e9dbb3ee73f7da3b5adcb","impliedFormat":1},{"version":"eebddc56f0570ba1a5538cb83507cac13ab7f24759e784da8af667d133409ff1","impliedFormat":1},{"version":"01794a05b7afd9db0848393a716ca3066cb32c4fc6d7ded02d70d8f2d4eb44c0","impliedFormat":1},{"version":"4a495b3b83986729f7ccb8c56e818e4c45d7d9050ea5827c23f6a89cd71bc529","impliedFormat":1},{"version":"bfc25a76dd65759c7401cd2fe4f070af193e8785c1fbf0a44014476a74190801","impliedFormat":1},{"version":"e59dee4d2b27a22b2bcb9020210a7d065073f09ce609da7cd402c76aad73d883","impliedFormat":1},{"version":"394ebdc9deae76a1c3e4ba740d60f137a46bf62d77e0fed50b079c34cb907533","impliedFormat":1},{"version":"8a0840a8819a08a9b7af9e053df07230542906bd2aab74bd3dada375f86c75e7","impliedFormat":1},{"version":"9ab6534198d7bc487bf5e990c6f1b971475d75a321f0a34f0f3f73a3d5e42265","impliedFormat":1},{"version":"5546f701029060f659bc0366cbc2cf212aed72316f1b41744740462ed416751f","impliedFormat":1},{"version":"a55dcf8d5c65de8a5326cd6f20a620b98ae5bdf86848a586902320dfa612b33d","impliedFormat":1},{"version":"9488e08ce992e9e64976132daa5275c57bc3b91b3fa37fc33b81585617daf727","impliedFormat":1},{"version":"fc9c2fd31b900c7fe943948a532ddbcd3b7e687f71768223c889596d11ad8dfc","impliedFormat":1},{"version":"cf5d4a9d3befa0c6c34a5efa3489fc7ca003100e05b2a2200c812744dc4b2920","impliedFormat":1},{"version":"73ba02ac9e145564d4e91fe90d07abdb6c3d565f213907cdd81298fbb01ed73f","impliedFormat":1},{"version":"d600313e3c07f919782e2cefcee7dd9af336e847d61d7bb6f77b813b08d4558e","impliedFormat":1},{"version":"c509b5642db6151661020758ac12bffa7652ffde20014b621a17a38ba2a39e32","impliedFormat":1},{"version":"df9d5f06a1692717762ca9f368917924fdaccfdfced152804d768eff9baeb352","impliedFormat":1},{"version":"34fec0d3b9abe499f5d53f1ae7a6c28d34ac289e5cff6f17587da846823cecb0","impliedFormat":1},{"version":"9ea3742314159f08b93e3dccb7fdba67637ba75736c12923d4df3ec9f40590ab","impliedFormat":1},{"version":"bc55f374f2b27277afd0ebdf0e503faa20ac18e81d15ac106e443ab354d3e892","impliedFormat":1},{"version":"4055e5f20cd88d6a1b97dcc9ef0708655901c23c974c17e7cb5a649ebb960b47","impliedFormat":1},{"version":"e35562032ca67f79d83bb8e2b86b61dfcbac6a914ce15b0e2235e6626dbd49f7","impliedFormat":1},{"version":"6fa98c19548b13e63df64ea3b9dcdd5b456059f2ec6ba14de67ba295c3884a9f","impliedFormat":1},{"version":"39fa2f68f5480e3f2dde09f8cf03e37c0b79479247c7a169ce833a39c3da38a3","impliedFormat":1},{"version":"34166077f3e6c2e0425c493ac22f674bb82bf02346f73dfab87d948e22f935ea","impliedFormat":1},{"version":"470b0bf94d9a87acee352d3064e5a58ca17c0e724ac322f99277df7d61def640","impliedFormat":1},{"version":"ba3735044629473bf01fb4eaf08e7feda3f79b00ed8e940567ded154b3ef7a92","impliedFormat":1},{"version":"95380bb77008f7bea0cb26c8419d7d9a4059dd1b052ad398cc8206307488321b","impliedFormat":1},{"version":"9ab2a9cdf761d55b5d7e6880a2eec20e50605202a34ab46cc8e3724c463ccf18","impliedFormat":1},{"version":"33f56865801c2354a9445b2f73ad504ca30bd16d9ca1677e80e14f9b1d76d456","impliedFormat":1},{"version":"a732278091b58df250bf1c50f11967bff74125ad4908da145934b5f2556328b2","impliedFormat":1},{"version":"9f53d732e2428018d73f09349e131c752387390bffff810fd0e0e8107337dde1","impliedFormat":1},{"version":"b4f5d434244ce624d089903f43f6fd9a1968afc9672443481e01743ac30fc135","impliedFormat":1},{"version":"72cc6feaff60559b953dd5ed55eed369037a02e1e75cda3845ca5de197a95a98","impliedFormat":1},{"version":"238284e79622aa34170eec5478e831fe63840fbb21e4300fb93b20b6c0902f35","impliedFormat":1},{"version":"d6503005937bbcc00bf5e2f5bd8d8189874aa824fb97499b2bd6c3b2eac1a043","impliedFormat":1},{"version":"bf9df1f095e33429aa80a7b057dad0185eaf472153408e0dde1f3e1986384686","impliedFormat":1},{"version":"1c9447cb3bc13bcccc77f144ade5a14f22fdfa1fb4f70f329c390e83b7b75a60","impliedFormat":1},{"version":"0ed013647437fa6f99ff128466bc63da7617d424996363b93f802c46a629843d","impliedFormat":1},{"version":"9ce2630805a121ede26ab84c426011dcdbcb653cf9205c8ca76a7a3893911055","impliedFormat":1},{"version":"be027215c5ee2b49b7489152206927df2b445fa7bbfcc34bce0977faf343ffe2","impliedFormat":1},{"version":"03925a73fad9827b2ad7812d6da4119fede2006e792fba0e59921bf55dde9bd8","impliedFormat":1},{"version":"c9f7ea1441283c00853bde21aebda6882b05e33c6168c93baa2d9b97ca530d43","impliedFormat":1},{"version":"f7f295733dc582028cbdad1e143f235bb85057d2352f7eaad46913b7c633918f","impliedFormat":1},{"version":"3b75242f88aaa3f3f32906223e09604e289fa6307dcd408320c9ed5c1b8189b5","impliedFormat":1},{"version":"6c0e51147f9b5769564aa829ee92beb65d4fde7d7241ec477a5c90dd09bc88a8","impliedFormat":1},{"version":"bb23f3a09f655673fa8c540028fd8cd016a9f5193b99b8dff1fa5233c240f55a","impliedFormat":1},{"version":"17c437eede5b2b3794cee847a4813d34c420cd1d4928b7a1e7322914112c949a","impliedFormat":1},{"version":"5eae95c41ccab2837381bbbf6ad8d2268ba05b65e760a3d0778a17b4d19965e5","impliedFormat":1},{"version":"43859204f2f5c89806116b87e6258aa9a9632d276a4e6f31585e0bcf79f6d81c","impliedFormat":1},{"version":"e175be3dcc5e0bdff3c26ee6ba0df95317312500e77ba770a2bc2e6a6c1ed3e4","impliedFormat":1},{"version":"8c4a91c016dc8cabd9338b7e4f2d1c704e24def84cf11c364eb44182d6ef5571","impliedFormat":1},{"version":"425407e1fb17c6762a6826e200882ab78ab254c06a6444bcb5a3edcf46ceac38","impliedFormat":1},{"version":"cf83180e6daaa29b5d127036a28a163b7dc5847a091f39719b39186a2ec35e7e","impliedFormat":1},{"version":"5a966cbed46a89616d3440cb50faefa551bb97b638ef26463d83a26b80c85584","impliedFormat":1},{"version":"0d8c8a56bd5161dbf6e10ce058d9dfe704ba946dc0d96a06a5b1c24c1d263d9a","impliedFormat":1},{"version":"476a6e9be301a83ea80d7f6475f2149a791e5d0bccc4653e627858ef4de62c0c","impliedFormat":1},{"version":"8c544128f4b4bf0764171b3be269511a3ae1c7ed0a3a721d41a690fdd7be929f","impliedFormat":1},{"version":"b2ea16e5a45b52fcd1c9fe6ad92095043d4d14b6ba661e34b8989f56fd9e43b9","impliedFormat":1},{"version":"d41897ad53cb52a13672bded07f42ce1c26b2e09776f8e6476c3f72f2d66dabc","impliedFormat":1},{"version":"1696982a830aea0e8e2f24ed5948fcec04ffebdb488bd93682313cde65cd4070","impliedFormat":1},{"version":"1e0bf6a0392611a0471a2f5ee45bd0b37b7100f112b5cc6a39d133beef733166","impliedFormat":1},{"version":"3ef07627f9a75f417148c2b65636c85c1995fe1130b194f1ee3e78fe3fbd8e80","impliedFormat":1},{"version":"d41897ad53cb52a13672bded07f42ce1c26b2e09776f8e6476c3f72f2d66dabc","impliedFormat":1},{"version":"3fa41f1b472d6e2719ac119190cc3e2ea4624b215fd15ea9e24fa5b7f8ec92ff","impliedFormat":1},{"version":"a0ad754b3bd67e8319030bbd6fe4749403ae0957153aa9f8f2c3ef72367cb0e7","impliedFormat":1},{"version":"515a4b762ab67fbb967fb5cf5e04ea3bab01b8757f5f0a3b834ff57f64a43217","impliedFormat":1},{"version":"9ff0d5d064fd804259fcad19909310bec4f6aec74c4970717aa604a159f84211","impliedFormat":1},{"version":"8ca03f479209baed02f5887a9e8222d4928850fbb14f79d3efe90d7a47028ba2","impliedFormat":1},{"version":"8341b97d5144a2dd38aa90c0d3a68f513faeefd56c758ddcde9c4d5b509674ed","impliedFormat":1},{"version":"34b5a3984848f246d14980ce87dea6e65318c32d5d33524740554c07ad9887c1","impliedFormat":1},{"version":"c6ca371b4283afbdd3a50f79e622879c00ad47514e242b03fa5179c7eb95dce9","impliedFormat":1},{"version":"e1e33525d37412411fba373f748ad91a6227943562ecba5e5e15ec140b220a44","impliedFormat":1},{"version":"523064befafbbe3bd4531dcf4fcdfa8e8bd25b6254d3da82ca8daf28e929cf45","impliedFormat":1},{"version":"bbbabc262fe1433817034b7225b9ab813063089e7faaabee72bef82178427b6c","impliedFormat":1},{"version":"4abbabd14e5ecb558fb4d8336fef5b2f602cf2a473a4260c5791537b3336a120","impliedFormat":1},{"version":"3559692171981b2101f0632726cabecc990914a9bd9abd4ceda20262811e4739","impliedFormat":1},{"version":"c48ca18e123cb997aeccf59222900780f64f83ab3c09ad585925b4962b15d250","impliedFormat":1},{"version":"401a63669e727547540d3b7baa92a52baa3347da9a306caf2f95700233b53a4e","impliedFormat":1},{"version":"b2233cd6b982a2ed3025edb1cde0f00c2d0d6db1fa8d7fd6b8ff9faf55fff742","impliedFormat":1},{"version":"97a1e967f06b13f2a8d7a3d75d89321458f761da80348c2804efb7e741225b87","impliedFormat":1},{"version":"c99b06fb20ce897f44d6777c61323130a0a21cafb690ff7c7304ea4d0d8745f7","impliedFormat":1},{"version":"82d152b72a86c2e9fb8c04c47716b03d4331c7ea00741d9093e667542c93a9bd","impliedFormat":1},{"version":"12f31c855d6740f7e9e334f93ae201c80044870233588b044e984cf383e9a94f","impliedFormat":1},{"version":"6b3e497a71110453570df44901ecc7dbdd5c5c62b008abe9b69dd8da27def2d5","impliedFormat":1},{"version":"bd89b633f43565e1f28b0add79691af677e16225bb8871f84c0056757f3ad7a0","impliedFormat":1},{"version":"84586dc2e5f93a90a1146cd283267572d6f511d860529e61d59edae63fed30bc","impliedFormat":1},{"version":"f590b53c526623edbd9fce0ca85c4d842c9c6bf44f3b8d7beda62c773ccf17f5","impliedFormat":1},{"version":"68747c8a7d6a02d44b626b1666f1af75dd6d50adef6996ecbc8a762488ed6550","impliedFormat":1},{"version":"96e01aa02ba1cd98b7570bb870537d3f49a68bd6407fd9239139985da202bcf7","impliedFormat":1},{"version":"e24c8e4ce93f2f740d5dd1ea575a85725b8e1dd320da5257356938beec2f5287","impliedFormat":1},{"version":"755f25e8fd9e37870e11091272f14dabb0cd9e3dd86f5df0e364eeb6419de87b","impliedFormat":1},{"version":"327754df1479b0c9c265b97b0aca99fbe1953e3d20497aa42ad6d418e514bd7e","impliedFormat":1},{"version":"3aaff6c0d520561d754395b0c4b7d706f06a98587b100f686734d20a643a4c56","impliedFormat":1},{"version":"0e8d39b8b864d097c5ecc6dcb09be4d6026d54d7a811b7bf7629b756de1c842c","impliedFormat":1},{"version":"a2ed41eaaf4327dabdcfae228cdb972e44b7ee768a13905026951a3d9f23daef","impliedFormat":1},{"version":"9fbf799e5eb45a1236439e09922d29f48da728c266a9db773f49047d43b73f1b","impliedFormat":1},{"version":"5751682bedac376a5779f4495e103aabcb1f363789226e0a754b201a7c3530c8","impliedFormat":1},{"version":"7cd9e903bf78a331847fff8d4d8c468894aadbbf2506a9bedc7c4f0a6a24c3a6","impliedFormat":1},{"version":"a501c4d0b90cde0f0721c1d8bccfdfb6843c650fae6435a185940776e72d82d8","impliedFormat":1},{"version":"8774d92fc085de678c5da7070b9cdbd39b939f629cf683a59218aa1d05db45d0","impliedFormat":1},{"version":"d9dd5e0f97d82848d11e11f87e71e9b9f475fd836f3e879b351cb4ac72bed905","impliedFormat":1},{"version":"d6a2e78ffd68d0a404d13cd60152f7ee4ec48bc1ccada92daab8e4492d502fd0","impliedFormat":1},{"version":"072e6a97e2a9291437f0541d5c06b5579e077d573d41f9cc9740d04972549633","impliedFormat":1},{"version":"d291627c803d32e31129575c8c3c5a83a23e38e69d8e5cfe3de0d2ce3f2c7fc8","impliedFormat":1},{"version":"d25e50fca109215ad1dc01b671caae85734594c677952c26da77facae17849af","impliedFormat":1},{"version":"98dea46d677c4222fa5b77c267335b2d336e393740f22768179fc0a0f9f95bc6","impliedFormat":1},{"version":"daec5d2d52be233262c80013e18d57be920152412de99ddb637700410ee7fa7d","impliedFormat":1},{"version":"e1e1837b07bbeb81a00d1b0b7edebf8f3e2b44ad148d5faff905ba17a0005813","impliedFormat":1},{"version":"e7e02f538956c85e11acbf3586c30048ba17d9457f23a4547cc6213ca80438c4","impliedFormat":1},{"version":"f5c47c1ab571300759282cd621f629a1c905742a67445e08e1fbf23f60183f2a","impliedFormat":1},{"version":"32d0da1473ddefee1c6fda291b0a80b90cc29b595c5482091e3e7ef8290e73aa","impliedFormat":1},{"version":"d025d6a28b3d69ddeb3cb0b9c3e7ed19ec8fb24452e18add0b495fdb5ddd18f1","impliedFormat":1},{"version":"1e778ec11fda32eb4a43f94247733639185f80212b6bb7e340838d4bb5c6249f","impliedFormat":1},{"version":"98a9416dba4de725fef1dd559a12f1fecf1ac784e6542141b590a611ce5084cf","impliedFormat":1},{"version":"20e1e198d28a4ce7f665091b7dea408351573c6599a8a3fef57bb3e345de4660","impliedFormat":1},{"version":"331a4c59ba270fca4e7d2bac87ba39135a117c460a12ec48dd919eb8a47ace50","impliedFormat":1},{"version":"0e56229981d691c2276d9f0112f536e103bba5e8192ccd5554845cd1f22a8c0c","impliedFormat":1},{"version":"c4afd4c403c5c08c2e0ee80f9a2d1653e4a55b5eb826db428ada069871c5b954","impliedFormat":1},{"version":"1bbb133267e10a208164b403e93aab3fbd78bc7d6c846a17804b95d6928b5077","impliedFormat":1},{"version":"ea5dfd206950d5a8eed566a321e42033f5b5a9df94c728e5c777c15fd009fac2","impliedFormat":1},{"version":"3464bfdffab42a9330124e1ee6aadd25433822602ee6a7b30102bf08ed7001fb","impliedFormat":1},{"version":"a7125fe108eb2f3687f74863ce642b05df19b2ccd2ac517a991957e3225c6496","impliedFormat":1},{"version":"41d618c1a7458dbaa9f29c5545d1df2923b8978836c757b41d85627982b01311","impliedFormat":1},{"version":"4bb6ea7f076386c7e82a21f763a931335150189147d191a70eb256f271cc0c8e","impliedFormat":1},{"version":"c7b19f40914ec59fe03cf4d6ebaf1b78a5d919e7284c22fcb57fee0ba547e084","impliedFormat":1},{"version":"0bb2c3e440231a71c28098da7857a79af8b7b462efdff01f6617b6a644aead8d","impliedFormat":1},{"version":"130e2259e30267f491043652773c9bc451fa8c7fb390f015dcfe7b3274b5b943","impliedFormat":1},{"version":"ae8b19ae045199e8177376fbc2d7b5d22dceccdcf965a4fd8b1591b7b1e6c954","impliedFormat":1},{"version":"0f4636ef291069225e2021144bda3c5370940ec70713ee0997f60b5084071823","impliedFormat":1},{"version":"f962fc4f05bde2eac9d70b613116e0e190d01511d62997d156b97d91eaa86ff4","impliedFormat":1},{"version":"6d80a7a75e84e9088cf23db88d829d7bf234c4e0dc4dbec02f78298c933b1882","impliedFormat":1},{"version":"543727847603aef88cf045219ff34f21392234e0cda33c6b4a87b296bacff9c6","impliedFormat":1},{"version":"8043dca35c02bf2e374c2c4e7d6be0429cd0b40ad80d51244adc061d68b54274","impliedFormat":1},{"version":"3c18cf90597200a6d15570e8ebacc02defbbb55077656628ad88e5e441b0b767","impliedFormat":1},{"version":"c369fec12e7e19e0db95d3bb4c5bc2b5b0abdf27cf6a69c07d40af580ba2062f","impliedFormat":1},{"version":"bd88ef18037d28b1f6b73ff2c9656cda9b85662b0a9e713a0531d28edd82ce1b","impliedFormat":1},{"version":"d1ae311b1aa20b835952069b1cf5c5e789140c45ab3a8eeca05781963ffc31f2","impliedFormat":1},{"version":"3a8628855f9dcdf076089ae6191a1797b41d4326aac3ea444e7b25a4e51457ef","impliedFormat":1},{"version":"0a613cd9a16af8a92d40007872548dcc1099e5a8063ceb6353821281c25b972e","impliedFormat":1},{"version":"454f21c515fd79ca2e8a7d024e384a9a680f2e94773c250adea98513a1e22519","impliedFormat":1},{"version":"fa37abd7294cb730fa278277b6aa22ed4c867308e778842113fe7b112c1054a3","impliedFormat":1},{"version":"f42496e94a212599cd12686e30a03c2ee81acb62e8b7dfbd3e84bf80abedda4f","impliedFormat":1},{"version":"6512a1722a7bae28f23066b426ab271134a23438c5dbb4030368dbbd085c220e","impliedFormat":1},{"version":"5a4944638591d30d04ce19dd91d92e083e620b0962f9c6a5dbc73fcfee155e17","impliedFormat":1},{"version":"83295161ed888ff8329c83d76ef4fcd0cd8d75010fde91623e65524017cae470","impliedFormat":1},{"version":"9e0219eefe4f1950bba1be69f32ce595175925332a654bf77d79b5c588acb099","impliedFormat":1},{"version":"e050e9297ced6e6b38841b93032503c6a5a0ba9bbfad6dd100803ba7ee86fb1f","impliedFormat":1},{"version":"2b4464731f95a1383395b4b6ab05750dd8003cd4bfc082328926524dc960071c","impliedFormat":1},{"version":"6c5db87af9fbb0b8ce270c6e700e5792ba4e75dc011932f5ebf8f88815abba3f","impliedFormat":1},{"version":"46609a58ccfa4ed8951d70c8ab20c6210aac7134db4f02f29eb8280601aa2ead","impliedFormat":1},{"version":"d221b97fda8881de90ecd5230e016f799ff3f581365e1ea80ec46bcf9804fca8","impliedFormat":1},{"version":"7fb8c3b540902629363eca66cfef31a0911e173a4b2fda3dcb0c8b38153e784c","impliedFormat":1},{"version":"70f1363b4768270a362bc0c1f3c2c6b4b1cd91ff6e62a861cfefb85f10bd2d90","impliedFormat":1},{"version":"d459a18f41d24c565e0e7bf8071058cdf4a9442a4ed8db1dd1aee59db9ff5cd4","impliedFormat":1},{"version":"624e6a7c29d308edd5de72cfc550bdee7625f2dff415c54d106b3be0b8651e68","impliedFormat":1},{"version":"25839b70a7407a9407a4d1a23fcb27762ef797eb3e94379383de748d52b4bb66","impliedFormat":1},{"version":"0adf7800005a992506b7e466c6591d100b9ad6d35b6d401e36d8307bb5c85015","impliedFormat":1},{"version":"6cc8242641c5e6befff23d1f62e400ee92437ad7bb89aafdb4924a6642564492","impliedFormat":1},{"version":"9d11489bc447facb412f41bec85117d3316e2af4d61eae43373609e890a55a6f","impliedFormat":1},{"version":"df82a8fb2e5cef3128830a08f6d00e5e7c3cfa25444faf10041011ad1ddc7623","impliedFormat":1},{"version":"0fff108215903bb791003f0ec4f522eb5b14986db32e11665ba09e73f407fa8c","impliedFormat":1},{"version":"98e1825ffe5adf884f52d751cde062b83b65fc2700c7098207686ca2f59741d2","impliedFormat":1},{"version":"6a3ecc2e6aaf46352e340596f82bfd01f52af258de902c9f98d332d646e5c9ad","impliedFormat":1},{"version":"77750e016cfd22e596572f957394adc24de3bb58e522cc55e289273442fc5002","impliedFormat":1},{"version":"98084a725f9b773ef2857a65fd4c7ba5d14694f9d73641a73d4647af79285b37","impliedFormat":1},{"version":"911f6b60872922ed17729a45fa3c1fd451e21b3ad8c3713a922beda14d5c7fa8","impliedFormat":1},{"version":"c3a92b5f905158df2f7600695b5af9b5c6254a0c7fa55fd6f191dc57cec97e83","impliedFormat":1},{"version":"a26901dc8a992d9283f94d258becf1500ee527a7941a6d7a5a64c586b6136733","impliedFormat":1},{"version":"2810b64ac19e63be91648169e04961f6add2d4e236a5730ec91d0cd8ee607155","impliedFormat":1},{"version":"09cfcb72ced8e606b5be59f4b87ed0af05fb1971726f21cb88c8c1bbc1cd2248","impliedFormat":1},{"version":"fe058e3ac05f9718ae89fbbae68991631c6540cb86036efba7910eab4557526e","impliedFormat":1},{"version":"6c8117420cc7babd64276da689df960d1949274970e4c0d39966404eaa1e3dd1","impliedFormat":1},{"version":"24184a91f0780558b3f1e8dab0c65ab320acd993e3f96872ab1951ab2020d1aa","impliedFormat":1},{"version":"6f5725b935925bf077168f60943fa29985839b7fa3669fbd5b078c347cd01e05","impliedFormat":1},{"version":"8bc25096cba884c56dc7a170830defd7dbc4eb75ba1e83d1e285216a50870f9a","impliedFormat":1},{"version":"aeca1b84be03d3326ca244d5a45a541004d2ecc543dbbe5e14727d03dff7ff22","impliedFormat":1},{"version":"fa8e0b4784fd50a6d0cfd6f7bbbc2e19d6aaa1cf58f8197c16d5e86e47e44aec","impliedFormat":1},{"version":"2e8e081aaf314b1c50271aa63a84934d91dd664ede3662d65572831b61976aae","impliedFormat":1},{"version":"abf7b81b492331d5c2c126c8d40eb3c8656c4214eb611feefddf12d3f259336d","impliedFormat":1},{"version":"8c8e7e234af3c537f53d8080666c39bc482066e043819d97aee7eccf6ac9d7ab","impliedFormat":1},{"version":"cba3353f5a0c93c5f29d3592f892251c9a367390b86cbfa44dcf92b54f6b1273","impliedFormat":1},{"version":"7b52572cbd825c9ee1cda96d9f2aba22c433ba93708b798dcf688cd79880788e","impliedFormat":1},{"version":"5e33a99c3759bb4ada6eac2103dbf45f073de71d7fdfde76569d81e324e6ec2c","impliedFormat":1},{"version":"75193a248aa1f5916bed2f77cf1aba44f598800089f701a24c8f82dd0fbc6b8b","impliedFormat":1},{"version":"956030ad86fb7367c9372d16f7802e72d67677620e4391f4ddd343629afd13f1","impliedFormat":1},{"version":"acfb2b43dfe5a70cf679bdbe793765d0dc21a6d2ad3f755fb89ecacc18f04b61","impliedFormat":1},{"version":"0a9a5cd5e4510d9f1cb8cdd897a98526b3a387e814b992fdd44eb9ffc6096103","impliedFormat":1},{"version":"944c2fa1a0bd0ec1b6ca003d7fdd4015641d388a124a8a42c9e50204f0b5322e","impliedFormat":1},{"version":"50c88ab8c34ab68c084a9d57e16e7d6df1b2f4b034b2d807b0ac63ffb5452aab","impliedFormat":1},{"version":"acac703a2fe782a9075fa64161d83b93e2ed84971ce5778b54367cae04861b4b","impliedFormat":1},{"version":"1e37e13f7eed10a9113766a659c71c8524131f906f7a255dad2a5bbbf523a3e8","impliedFormat":1},{"version":"acd1a028e3e324ce781004b3d7caf47642583674f37806bc324e712e1a73079d","impliedFormat":1},{"version":"6f8c2f7d30b0826e4abb52cab6ee47b38da458b2f4df1d9847aea7dba09d91d2","impliedFormat":1},{"version":"81e485f9e98308bccf4ac86f1d82f321ceda2457d412fec97000f817b9d643bf","impliedFormat":1},{"version":"6d4035817abe611f96e16ab5c02d08769e57d8378a21bedc639ad01c0dc18f96","impliedFormat":1},{"version":"28f011d350478330e3c38dc8fbd6a803667c93aab3b7f48ee1821b77d1fe295f","impliedFormat":1},{"version":"58f99b255362976cf050f38c16c1d5c2692f16df9c89d32fba375b2d6e245c9f","impliedFormat":1},{"version":"ac21b8dab215ffdd94a264d31c1a103f1367f64572314683f07c668b49a654a5","impliedFormat":1},{"version":"229add56e247c1e8182d073d534d3f907caea366c89c346d8340c247a04cbc8c","impliedFormat":1},{"version":"b6e116973657b5cf2cb3f51332793b26fe31f2153c5eb48caab0d4a5af01542a","impliedFormat":1},{"version":"968ff63aa5d7b93804ed371538653ad8e1f7a8c9988bb1aa9efd65b620aad64d","impliedFormat":1},{"version":"9f2ab92b089dd1b38818c1af589dca006eaab8abea5a4309b57f0de09cb5ae5e","impliedFormat":1},{"version":"6875771fb6530522c5316033bfcb39881bdaaf7266b145792f322d895fb26ea1","impliedFormat":1},{"version":"a8e3fe551a045dce96e3c5edb2bc6f142692ec771758b91e28f1a7107e9c742d","impliedFormat":1},{"version":"d739cf4900378ed3f81009897b135cd8bf836d2c61354a0afc624788c820b0c5","impliedFormat":1},{"version":"09e15e0e59d1be87d2c68a4542c6ca9a6debd152158a6f880454e0ab9be37ad9","impliedFormat":1},{"version":"3710a4a6660a9277bbe498a19aa9999997802dc0dc53dd242087fc8ce4832198","impliedFormat":1},{"version":"fcfa4fd199884206ef931eb960e66d35a21570dd023630504a48c68421a35a6f","impliedFormat":1},{"version":"3c021642295e99ab82b34dfccf1f9107105e765941ee149a58da1e75d8b34fc4","impliedFormat":1},{"version":"eac743b5660e8e7a5b5c3b1cbde9d58d1d938f31c4ce301186d4904ed16d129b","impliedFormat":1},{"version":"35f03a5828927f555db3778528178499447b7ca406f4ec0c94981c715284a637","impliedFormat":1},{"version":"4bef1a896cb320e389ec8ef025097a41159164ff26a14280d59775af2257f9f8","impliedFormat":1},{"version":"dc36e988cb993278abb0cd3dd2c32802d8e8065ee6e970fa69494aa6600dcf5a","impliedFormat":1},{"version":"2a35ef77ab70c650c39416ce43c7c6e1f9cabdfef48314ac1b809cfd6227ce66","impliedFormat":1},{"version":"d97f7d66cff15354733fb262de4a7f2ee46adec1e46f20ee717ec710a9567aeb","impliedFormat":1},{"version":"f8057bf8e38926f5f57ea9a7eba012cd59b33817eb5c548fe2ba784d55adc0c7","impliedFormat":1},{"version":"0531e251316a6e6d629960dbff082680a1dab1953f6b1092c47a3f9941db12d6","impliedFormat":1},{"version":"c3bf7657a61131bd57391555d79d54e2a4dfb8b4df5f3255c3fbf352cbc68801","impliedFormat":1},{"version":"1941d9c193562b505c762f4e2474a170947f4d38ab7cb01cc6cb0cbe19648d2c","impliedFormat":1},{"version":"b6a68e51a0e96f3e28520a55806b70f3d9cac59fe0e1d3d56d9eab26fa07d368","impliedFormat":1},{"version":"ee4a57ab6f2a9e0f7db13574e1ca490c8564076c7e1f1023ef6b033510036005","impliedFormat":1},{"version":"6f948794453feba1a5701259ba0743610aec499fb5d821a35a0d658bc02ba79e","impliedFormat":1},{"version":"3100f28c18a0a974faa3235684d7719d47a88132994ddb00490771217bce03a3","impliedFormat":1},{"version":"896531d3473483a5f8125cfb1939eaca0e68889594423268086db6d111ee522e","impliedFormat":1},{"version":"d8a0e4eb3f52e820e62a823e62815a9727b613ce7fbea995e999af0d8fc5386f","impliedFormat":1},{"version":"75bbd778624ac10799f7b0e5c529bb517ed4b323ec1aa63e7ffc5b9be348aeaa","impliedFormat":1},{"version":"d6c627c11a2d9d4a9911d028cff4c244f5f6cd102adcb575cd6cf92d55582d07","impliedFormat":1},{"version":"5511449580cba83543fcdb22bd6927e7bdb57e3331413921d9846bc6eba5ab2f","impliedFormat":1},{"version":"7c7c0b5bfc91d722fec5c59d43ad9be93a40ffc95d79b3384ac78eed047f9ed6","impliedFormat":1},{"version":"05176fadcabfff757208c5f736ee1689a73345ea9895566e93740738e86e5643","impliedFormat":1},{"version":"3b02d9156887116ffbd6fd7124d9bddfef1b5228adc7028ff0bba5a174d7fcc6","impliedFormat":1},{"version":"07581991b81e0d49d323bd35f17d2d0d00736fca125970998e8ef876dbaf8b13","impliedFormat":1},{"version":"f2b525f05e7ad7fa4f8fe746df2b9d4f41cda24edaa77be17d54f1c10fb51a05","impliedFormat":1},{"version":"5d2017f209bf5c177ffcb026c1e452dff03dd73db56000f65c2c5ea3dec89ec0","impliedFormat":1},{"version":"18977816a92eaca224b1bde34424d2478165d41183916a17c0f151b3666c78a6","impliedFormat":1},{"version":"27fc88c6a6d0ba0ae47f3ec03c9776a8864d13718c2d28d1fec4a2eef81a2c9f","impliedFormat":1},{"version":"18c50657b75421d43fcd0bebf144599e077757e197a16a77fc77c82c56c7fa53","impliedFormat":1},{"version":"ce6503a1afca12129cd690f7394e8b77515e3855637fa4ed3c08e260000bc170","impliedFormat":1},{"version":"253f2f34330657b3b936cd44c74ed1ef99e1c72819cda33dcb68edba670bf745","impliedFormat":1},{"version":"d6f068d7a96ccb435848dd65d8aae4a0cefed10984b270906f1543f7926f7906","impliedFormat":1},{"version":"445aaa283d55e4c514ffd0092dbde240881d006b328f109b3d560dbd4e188f46","impliedFormat":1},{"version":"00e725bfd68aa39a6adb7da022b285e25248ec45c6f5bea067fed2332e9649b3","impliedFormat":1},{"version":"800711e010bf97883d17ad5f9ddf273cbd144154ba049b13be5782ee12631d84","impliedFormat":1},{"version":"197f54fbdb04c26933b16c7136580a64ad04fc06070a45912dee4f6b8fcde925","impliedFormat":1},{"version":"d49017483f66844e8783e9233e0c3f09fec91aa5320f2e748f11d3b3eb9f7d5e","impliedFormat":1},{"version":"23c6c92831e898a6f8b85625b55b9fef92d6881e572de418202f3fc1bccf699d","impliedFormat":1},{"version":"ecec1f45c9cfbc298e3289f86b1f7777fb98d0d30ef0faf9cffd5531f2ebe82a","impliedFormat":1},{"version":"7e15689b7d761fc48392b4567c1686140fb0f5af010c37d8cc73d64a9b342efc","impliedFormat":1},{"version":"7b3bd78b337f25ee3e5fef56bf9128c35a9c373132dc32973a2f3562c05f2c18","impliedFormat":1},{"version":"8017d763bebde1b9b1809b5db43f3bdcb96c6e143acd5508fad20b9241bfe52b","impliedFormat":1},{"version":"8c57412451bb8b0d63059493bd6172b0093b1dc4ab67135800bab686211668e2","impliedFormat":1},{"version":"ec9da0cb04d7c3bb80aeeef3ca4e0e41848cd75d2641b2aebc1cd743a0a92de1","impliedFormat":1},{"version":"55afc4e97b67990ba7cdf4e3411e58b7a71744ff1ac2c4ad1d48242e134f3dfa","impliedFormat":1},{"version":"89740506440be9310e5f28fe1b9934b6be996bd5ace4161ede38a88c639716ad","impliedFormat":1},{"version":"010d565a326fcf7b7dea5721776f7908adec311179cd473e43e93430d3fb52f6","impliedFormat":1},{"version":"67a040f0a1160345ecacacf65694ff1f2b1bb1b8db1543bb89641b4bce078c74","impliedFormat":1},{"version":"be96211f16e21fbac4daa790a0debaeb7d2f33bb66abbce99556041f370402e2","impliedFormat":1},{"version":"b2d6bceecca68f239a650eb576994d1a6df7f8772cdf395210d54d8ba32405d1","impliedFormat":1},{"version":"327107debca41a137b7827a1bff2a7650ee82273ae0c2414956c72463c2c4692","impliedFormat":1},{"version":"e63a99dbdfb1509c282d4871f37230f0220cbb62f6c5b123c7eb29e08925e543","impliedFormat":1},{"version":"282d7d906e2e6a7d1851a4df9bca2313303a60badbc2737edf77c143526b1c88","impliedFormat":1},{"version":"7a9a9af10e90eea2b7ad7c484145e4d7f77c9f02b937c29390c3821886573ac9","impliedFormat":1},{"version":"74792d4ca5e78ab1de2a86d75e81149776cd3ede006e22433232179e1d9d1740","impliedFormat":1},{"version":"2c828772900391675f9010a154eae8c6272d50632474bb62f966b2e9905fca2a","impliedFormat":1},{"version":"206a972d542353e0e574b80ba816be9133791e42f411ca4ccab6bec67ecb1615","impliedFormat":1},{"version":"dfdbc2fa0d615f3c8157094eed58d365f3ee895f0a62d88695effaded9509b58","impliedFormat":1},{"version":"4db4dfd8dd13152d2f0344d3b4ee3676772eb931aa0e93693e5681d1c7e7568a","impliedFormat":1},{"version":"726f3a07eaa8d4ad213f1e35169129bcf300a9f57087882812042fedfb4a1103","impliedFormat":1},{"version":"1d09c5eedc322d202d08f8debb077cee094299482d4f31ed45687b7ff39f0537","impliedFormat":1},{"version":"0ef19fe230623672c6d256236bc6e76623050b292f2b305987de90f06828fff4","impliedFormat":1},{"version":"40c1a51dc07eabd3e30c7a0869fe042a06cb6e397abadea4d981034160533554","impliedFormat":1},{"version":"f6144da2ecbde205418b9306abaa7454f2c963a30fc1a402ee037fe67edb5a85","impliedFormat":1},{"version":"1e371cf5281c9defa39cc57a2bed1dda7bf53051539577eaaaf56d258704403e","impliedFormat":1},{"version":"b7ac271ef8c556941eabe8e72c44f5024e17d910e47ba5babb604f2ad3d9914a","impliedFormat":1},{"version":"254759e0f50858e5be171805b4a673bcc43f2a15f649f436462a7d87ddec1e93","impliedFormat":1},{"version":"ae343c5c09bc1a4a8ccc1c1513797c167e0767993d2d82597bc64d2c42b52685","impliedFormat":1},{"version":"e74200516a897bd98d1609f27be582033cf12b7d4fb01dfcf48092b8ccbfcdc9","impliedFormat":1},{"version":"c00a3889431a387cd5213e40230aa093ac00ecaa3d163a85bc592139ac6631ae","impliedFormat":1},{"version":"7ecab76043bb20076cb5212aa8da948c8771d30ced270ae8ea001f34397b3209","impliedFormat":1},{"version":"1714ce8458fd5b757fcf0a01eb07cc0aa297cf88edd7ef74eb0922b8a80e3b0f","impliedFormat":1},{"version":"a4c896217bf522dbacae0080d82e52dc47718cb7267cdf6c46c4a2febd0e9d2f","impliedFormat":1},{"version":"b750bf8cb0d80e742d74deb78d6c2723e28075665fdbab98f7fbf6984894d950","impliedFormat":1},{"version":"cd22215a4f429603c0ca0989bd2ef90c3214f22d1ed40b93753c30e77e34c23d","impliedFormat":1},{"version":"32cf3787c1c2e11daf3b263983d3d4a286ca876438776e76aab1a7f69a09ffd5","impliedFormat":1},{"version":"3f8b73c205dcc937301e19a8524096481b94b08b3f539f228303ecfe3f720f8a","impliedFormat":1},{"version":"ec172d151652710ccc7561454b21c9891d346b0d42cf3fdb532c9e4c9c18b42b","impliedFormat":1},{"version":"7ed827f20555786ebb85de60f124f7ec5d310e62e8caf09c7fa6fac788ea24dd","impliedFormat":1},{"version":"4f0c321ae3f9670d8752be0d6d8fef08d7f6fcc9048cb65e5d03c0e934b73887","impliedFormat":1},{"version":"ba80c7f32729824e8ec521ecd544355012990ca20c16ddcf968720a7b1c817f1","impliedFormat":1},{"version":"5e0d1da019d104d5340908bd5a3c47704303818d27e07b94abba10170d3f9b83","impliedFormat":1},{"version":"640dfe5cfcb32afd002a422aeb3fd663be2d4f0db7ad2bb2f4fd492a855e49ab","impliedFormat":1},{"version":"1a1bfccc6354ef6e9d73011cc08b734311e0c6cbeb9fe19f6c25e4ee47ce0bf4","impliedFormat":1},{"version":"12c40972340ddbf2a8482e5f7320d5e6aa4230a462be754b7574201d2dbda89f","impliedFormat":1},{"version":"3970ea9e13ee6f473b5912ebde92e3de8857cafa609e9969c3bbfe606907e465","impliedFormat":1},{"version":"a67e70d495ed11f391211a8fbb04c22ea96d97a0646faced3a843aff89b34b7d","impliedFormat":1},{"version":"a9611f7ce5024a263fe3c6d13d6afd7f4d40ac5e8ccae29659f2266b035fea4e","impliedFormat":1},{"version":"69c0910cd2adbac7ef977b3174152f048e22730b9212daf1c04691e27797cbec","impliedFormat":1},{"version":"4cd263e37563aae86103d7f05bf7a7b822c196a5df199de5493321b3956b1d70","impliedFormat":1},{"version":"81a9830fd86e978c54212175d4e98261d483b18b0c20a0d8b7969bca7854abe5","impliedFormat":1},{"version":"e511f9b393c367c510423b8c32cea29b85041cafd62db728820314101d26b63f","impliedFormat":1},{"version":"91cf055ff6d1157cad637c0854905c175ae16e085d90896fc4fdc8579c01f0c5","impliedFormat":1},{"version":"5bd284409327bd032d3a03e4af87b80c140e426338c7be7aa5094da3d0eeee45","impliedFormat":1},{"version":"e73a2f7ff4c22c9f8e8a2c9f2167411a43abf7c2b0df2040fcbef397432d6849","impliedFormat":1},{"version":"9ea0fed4f40164e059b356cfa79eca1f4989262247398dba27d0e4d5301da816","impliedFormat":1},{"version":"509bd89f23a7956d094bcc4c600cc12564ec32e609b6acfe498b6c67d1ccfbfc","impliedFormat":1},{"version":"d63707bd1c8e4d6e988a6f8b81724b1188a23195016f491d31fb6098b600c985","impliedFormat":1},{"version":"47110029aa9cc198e2dd55b8983df71956785bf7aae3d40f1e17c0a41e2f40ba","impliedFormat":1},{"version":"e41408cc29f9283a9cc2479b2ed04d378c1dcc07a132e1a0db61ae5e6fbed624","impliedFormat":1},{"version":"7edfde4df10c002ecdcf9600c1e731c83ce9b88a3895fda32f3cacfe1448a545","impliedFormat":1},{"version":"26f845eb94f0cbff4fb342010e1fc24064a79f3cb244cfbdcb901c72313eaea5","impliedFormat":1},{"version":"c08abe4eb7d27ceb3bdfde948ffa7a7831b9b716bf03618ddba0db0199e49fed","impliedFormat":1},{"version":"0d0437bac216bead268ff9b4a2c66d10efccafdc41ba582b2f35f38f848ed8c2","impliedFormat":1},{"version":"43b31cc0fd38809f0c3bc3c2d2cc77b391acd9085d382c3c91e80e1b4c34caaf","impliedFormat":1},{"version":"da9985233839dc77b5a16b04a3c30afc1db42e3e991a1f23bd42a43deae80e06","impliedFormat":1},{"version":"1d7dfdb7412f7705b88a306775ec0f433b4ca2032484c539af05eb1019855b60","impliedFormat":1},{"version":"b7efab411587fe6eec7d0debbf96fe3ea9a2878dd01a928f5590847bec9ec884","impliedFormat":1},{"version":"fe3231da9e8e77e23d81974eeba44d4de894e4f7631244c12beb30ccb9b7780f","impliedFormat":1},{"version":"d5f05696f63397aa52e7d5f736cfbcd5117fbc1f97e66b60df0ac6926f786024","impliedFormat":1},{"version":"8b1c6336949a671ab4a6f11f9cab39ea5a1fd2ce229490883c43e99c1ae1b9da","impliedFormat":1},{"version":"42ebe555ac2d83bc60369750812eba8e048c83bd650b250780f472329f252c23","impliedFormat":1},{"version":"4d7aa8c8a4ab7c4c98c2786272d4f30111618d73f32a06360b66aa8c03916de9","impliedFormat":1},{"version":"12cc4340b2d5a15599ba3a4ea32aed2f952f0517f61f1c314cdd67a85980b08a","impliedFormat":1},{"version":"3a932644a88d6ae1957c97f3b10c5d1560801d40cc8c96d6cb580c2d90958805","impliedFormat":1},{"version":"f6702e5d7b8933f4c638b391e0c654e4dded8fe60ad98d2fd2d01ba0640c8cdf","impliedFormat":1},{"version":"e43818f6c3bfa9b25be2285a99d55c73b0299a4f964c46a6baff49a4861c77db","impliedFormat":1},{"version":"d9e3b7368160756be2b7be06d2106cc4f88c788b3b264792e7ccf0b82afaf8a1","impliedFormat":1},{"version":"601d218e0d8293f49e6a4e80f8a21e6735d234b1b8b8e302f8273968b82b66f1","impliedFormat":1},{"version":"47e2f1f2056fc79183944dc67435934c076221e0dce4cdbb5d5351c507c8358f","impliedFormat":1},{"version":"0caa8b7fa869d238bfe1ad77608606828d3ed36824f1c6d749fb01f4235c878d","impliedFormat":1},{"version":"a4989e72ed4d93d727577790eeeb8f8e10f555779c10dc38e7cdd4577ec233ca","impliedFormat":1},{"version":"f26c3f9dafe8315df6a5e70b04fdced7963854ee479a73cf41a6f7a7dd7caf4f","impliedFormat":1},{"version":"2d842f7ed1de57ebdfdfdb8a8805ac6301e127f45124dcbcd9115a12c3fc251c","impliedFormat":1},{"version":"0421e5aaae059f79a8579b19c03a6a5ace53545c03215a5e6c35b93ba7c6964b","impliedFormat":1},{"version":"9d23012eb12780a94b65be1e3d8cb9afc3efc8c06d17012307d462117219de12","impliedFormat":1},{"version":"e066a06edf364d52f4257380e6966a02442c01ca2b3e222f496355d35ef7f0b6","impliedFormat":1},{"version":"70002710a6f982715c40fd1da01eca0bc9298ba07f3bc37347995645f53c2dea","impliedFormat":1},{"version":"29c9532cc4863787c5827dcffd566f97b0798ecc33558ddc5167d52d0e6168b9","impliedFormat":1},{"version":"de2127b95990f154f41afb1f80a9f459ae7746354a9437a7eda1e55e4420e529","impliedFormat":1},{"version":"aa2c16e35d7af2b6835509ce8e778f5046c45b91b2d37f5737578e0788d1a7e1","impliedFormat":1},{"version":"93aa2e0816593d2bc0cf04c1c6b14371d2fcada6e561c14bf56d3282d35daaa6","impliedFormat":1},{"version":"fdee57eacfb577d17fe209f809f7affdf510c1a64aba8ed3cedb4d74e899cf84","impliedFormat":1},{"version":"db60e032111a14f8c2b6fe319ba70e199d0cb75a0a5adb68c51754cad0941f59","impliedFormat":1},{"version":"03d492c452bdb5d1f9a9efb0e3b375ac17fec045947da6bed9745853b4ee24bf","impliedFormat":1},{"version":"76613c2b87fe472db96b9a4381cd105444b2a15712dabee2703744f4ea6e2fdb","impliedFormat":1},{"version":"641954759d5b9bb6ddb22115d022e224a3f62bad81077d6fe8d85bdf4ebe3bb2","impliedFormat":1},{"version":"dfd535a8d6b871735d13ee27e090b80eb67185cf52e376076574cf0dbc508dd0","impliedFormat":1},{"version":"b7c031179aea37a4b665ab42bc6832392cfc086651e1f3cbbbe17a1229527ec4","impliedFormat":1},{"version":"2a14128e218dc0fce2ad3700c3e45b79eee6de3919a1af2005205665f30c50f3","impliedFormat":1},{"version":"7c2fdfff73c7b0e57b16b5707ae5b237c8a71473f14961403564741bb2d9ad1b","impliedFormat":1},{"version":"7f262a8e55403fdb506262a921fc15d7e31b6b66295fbb4dad302f6fdf8b21fc","impliedFormat":1},{"version":"75faf23b173bcb248d922a0e7d19b7855afb7f5e386028e87a75f525f22a0bd2","impliedFormat":1},{"version":"05bc146f044fee663255512523593acab4a310fb3700199598dcdf84d9818432","impliedFormat":1},{"version":"fb39949c6605d05313099ad88baaf92f2824eb36d20b80b0bb3fef70b5cf83eb","impliedFormat":1},{"version":"8ba546d0184f4a7cfa7bedb4f0c7cd30b3d8ac67f9fb960dd26fdb9ffc63b713","impliedFormat":1},{"version":"1261f11b2ebd54f4dc6afc809457da931b4c9618c99b488c041c3fffc5f3788b","impliedFormat":1},{"version":"6eb3cf6a903570fd4d8f670cdff675bfb67e8828e7b579b71208c0467eeaaa3b","impliedFormat":1},{"version":"6181651b3d922f2009a00282ec2d6fc0931176a944b894b79f8e18cf4b2b7f74","impliedFormat":1},{"version":"df4c48b5a767ca6d06f0b71b84db179851243122d8b15a92e1b8ddcac7e31547","impliedFormat":1},{"version":"0d2afa97d7b566556abadc03816c3568c5b374a66e72e7e6631bf4e3da6a631a","impliedFormat":1},{"version":"e166c42a1b73ad0a670c7f118a12d89f89a8b7b7120b4a3814a06343b0051ee0","impliedFormat":1},{"version":"eb896f64d252e42a5566ac88ba8262fdeeebe3f1903f38acbed1e3090bffb3fe","impliedFormat":1},{"version":"d0e4b317ecdf6c4f2c0caa0c95f99768cad523ee9e915df43d656fcbb6f00e18","impliedFormat":1},{"version":"a58cb0a782ebf1fb98c33f0c82fd5bfc44663566d47b91de1e242faf18853e30","impliedFormat":1},{"version":"4893fd721b065c846b558036d7110d64708a8337677886a664da64f80d75033e","impliedFormat":1},{"version":"189c79c8717c3a2cb0562feef4597430dce71ab1b123107413b7b92cbdfa6583","impliedFormat":1},{"version":"149fa2725757abef64f95bfe357fa53dcb173502afdc8ee0067ff0b9344ec310","impliedFormat":1},{"version":"0fce30e9ea633141f934dee5bdeba6b955dd4383ebb34553c214280ae6c595f0","impliedFormat":1},{"version":"e42ed423f29f47e2c44a574ca7de673c853231f85f4c3590ee6970db259b75bf","impliedFormat":1},{"version":"5bde7261dd941588be86b702b9dc72786561299cf7271aef232504bd8a22f504","impliedFormat":1},{"version":"926cb5e62425abba24f17d3813e59966bee892e434f84d51fa4ac3c2d2f02ca3","impliedFormat":1},{"version":"47597ce6305dcddc401ba92e383cd8e751ec078fc42546f305326e9f76b4a4ec","impliedFormat":1},{"version":"b1de63b1a81c18999c5331e9a14bb999caba0905b7815619dd1fb1fa690813a1","impliedFormat":1},{"version":"c39749c50dca48cb564a35f413d170089152380233e39396105eba049c1554ec","impliedFormat":1},{"version":"e4128e408464f38961eb93e466b10f0b70a5347bed31a306567de8a9d2cfa2e2","impliedFormat":1},{"version":"2d6abcf5bafa6dcba05d93f3a5addb1fbe1fd97accf0fa31d68cb0efcdb43c09","impliedFormat":1},{"version":"728f996f14dc3935a2ed4c0a419a84163f85c52473fc930b2bc7d29c0c67a309","impliedFormat":1},{"version":"4ec8b0efbfb1789df78f2d1a83701eb6ea2bb28902be8dd48f2881185c056951","impliedFormat":1},{"version":"692ab2223b4e73eb7366d5eddbe53fa33c95c3824db0bd9127ce00f4220f4d2b","impliedFormat":1},{"version":"2c347f3123d7bfcbef0ef65ee28afdfbea669a34d0599e3a957c2f7b0b2e2ea1","signature":"cbf4929a03e21f1efc096c3844bf23ebbc2a63aee04a1c112961550959e78bed"},{"version":"b454c786b93610e4c1f846e6ec79151383c92a8ba811474e43ccb4b27fb6def2","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"3aa0191a3fef91838c231928cb85718ddd5cb835e744ff6409fa2041853b5f59","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"27e94fcd5716ea90316f94c16d7adf20e84ef834f1f2299a06707c3b470d35c7","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"cf9c748355bd3a2e3fda3af11516ff1514b0d6381b23787de0a3c657a9781020","signature":"fe6da0811de9969e3fbc0f33e6f71c577ddddaed82d0a71c66cea696c1e4451f"},{"version":"a05e78cdc4cb75d13705456fa8f9487d6d2971d57fe0b3099f5b2b8635628708","signature":"27c6fb0b1d1e5e95b7206c5d93c4b83da39f719852a81292032aa140dea802c7"},{"version":"718449c8119775878941cf45768d55238d3da7c44b1d1cc8b5fd7a7c6ca87f4a","signature":"da4b6b9c275762e16c3f25c9b9a2619e85b0e275b6bac04149df7546cdc7d3f7"},{"version":"ae00d6233f6b444350a758adc33a2bdc7e4114cf85673507f4b0ec0d011bf28f","signature":"b1fa6b24929b174a175ae6939c5343037df32c88b753142562e407d382637df5"},{"version":"045faf11c365dbc6efab1eff851db2cf8611e3b4d3d857e3ae20e2d7b073fee4","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"a3306a655467fd78f94061efea6a4849d73e2ce70c16a7aa2e86edcac8003d67","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"eb58fe82b94e9d939bf7f9008ec2bd60685abb453c84766ee6b383bc0ea3ee04","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"865299278243076bc46d6fab22ad7102dadbaf37822f9b8e3e9efb6731551686","signature":"56c3bec3b3870d45356c40cdf8eaed6d48801b994e9de964d1d198caa24cfc5f"},{"version":"1bce8e979bbbfbbafc15255ceeecd3260345ab4d628f6c7d1232ac66576321c0","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"1fd6adc58258543eb8b1d73733f506d52ea718d3b07052559d1a681e6b59b043","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"e720c8a37b87f5713093ed04015dbc647996545ffc0fdf07885f444af738dcff","impliedFormat":99},{"version":"f73b596cb4b4860fd0a3ea8cab67a42ad344d95a392ca986ca4588f59ea8c2cf","impliedFormat":99},{"version":"ad60a27f86232effccda771b5fe6852604ab7fa36637dac3da122be6be7107b7","signature":"be6fb521f30d2952c0fdfb51bc2cf2dedb65686dad9e276be5411df932abfa06"},{"version":"836dc9b821395e33a0635201a8babad409e4cdf5410f6b91052fd7068481a567","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"4ef9ca3b2a2bf2f8b21343632ba0146fb9fa05b7ed0ceeea8df8b3bfe4e36131","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"9e004aab4cd07f39dcb06c24812bf54b4eadea987824d064f194121bb2181750","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"bb8161c1a15c2a9abd02cd18522ef0f53b4fdcd2a570ef75dd4fc4d556c86a27","signature":"2d02b8fe2d138e9e77835960e51348bab6ebcffbb959dec5407476588e16ba3c"},"7121f8a3d7143ca81e758e5f4924bb60730a03268151ddc0688f144b03d427d2",{"version":"4b464ebe4030df055365a7b373960c31ad3193a0ca6035dbd47a4524dd3b30e1","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"33bde33d22193adce818d990639a9648ba80edf3c421f07a5969c531026d7ec2","signature":"2fbd85addfc0a7ea8bb60dee32e74cfae717193f4d1c4de92d98774ee70fdbb6"},"4237415a94b53051094d964f586967c87a8cb1ab3eb0032c831c2951d4d09edb",{"version":"fa7aa9c16a019d592fdc0fb49dbd819e070ce7188c86075d2f0bbcd0933e66c8","signature":"32c85b961d512c4baf4471d93f0f98703b97771389f5be0a3724433740392b34"},{"version":"543e0c4b4aaaf8daf7cff0e2b10057d42f3a1776c16a43553338ad1fc707e1ed","signature":"9356d6a20f98e71a50eebb88c2f22214c5717ec91c9e566346749f3fb76698dc"},{"version":"872f02345461bb5215bbefd538532bbf88503ac14d127d957bbefb544fa716ed","signature":"4f132fa93602067ffd08f96a0df65b0fae0cdafdb90074774c0db99586961253"},{"version":"789891e8b8386136b7290fe7eba4de8f1f75d0e96b52b4d268b67e5f0c406096","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"e6e6ec0b2210f5491401581cf12db8c0c2454110f6e582e9a5949215bc895c1a","signature":"4203881928b2d5bf69d893ec7ebfba37a893334dfdb8c1a1991fe7ac3be05c37"},{"version":"cb97ad5e7e8900ccde8f4622e4dc09c51c8c4d411c1b963320efa8f3bc111e94","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"471c11ae126af540479b5f9ca4944304fe529c949d44a9c14649bf2b5aa5c67f","signature":"7c007f445e74844401f69399f0da3614cffff3f36237de516376eeee12eedaa0"},{"version":"97baaec03502555b8e929aca9be1b28995a0010709c28d4f7922ba51ccd1b397","signature":"2c58ca6c8aed6645f9506ba40ae1ddc6ba7fa41cfe5bada11f5287db56d67526"},{"version":"79c662455dda7276e2ade17948973bd374e733279c0db40a19522b9a3f9b7c3f","signature":"d576fffdebf99baba8b6213da269a0c0edcbcc87428e33ff117c85fb01fafe14"},{"version":"6392353adcff7db02a3f5dcacb5637b791dbbcb76125aac3075da2519af9785a","impliedFormat":99},{"version":"1f3952b74b8c766a2e602a0ba2db19d3d872d00bab4e01746c6b7229c585086c","impliedFormat":99},{"version":"8df31065cfb339718aaad75291fa8c1cf6957e08178947f8ddbb81bb08ff5480","signature":"b6d89b0b278e33c0aa514ed188ce46c6cbffd6c20f2214c7b139b5e5b59535a7"},{"version":"4181fe0f4efd449a39014ef97fd87ded8c44e1dde60c1da5a182910e74900ba2","signature":"b6d89b0b278e33c0aa514ed188ce46c6cbffd6c20f2214c7b139b5e5b59535a7"},{"version":"96beaeea47007a8d7f575b648ff2df60e48ebb865bf83539371067692d798c4a","signature":"b6d89b0b278e33c0aa514ed188ce46c6cbffd6c20f2214c7b139b5e5b59535a7"},{"version":"b0d4a0de9bdd186cf2a14f78058ef54f62c2e4757f3a78cf2b490c0db4d6e80a","signature":"431837d6b403e5fb2be960c5c8df9385fff1b501dd0b79904da8228ac60859ae"},{"version":"620ba450e15d2b364888dc6c96b3a1d8859716c544d76a17476c994f9f0fee25","signature":"6b068e399e00dfcaa1cf320a39587ec06fbb40db94ff0adb3508749c8634d77c"},{"version":"58e83811bbdc661eab637ad96abb4320043cc7b9cfa99b9ecc638face30e5534","signature":"f0173c01d763b29191674bbeab42f507fa2774bc7a42a6ca483171a59dde2d68"},{"version":"58dd7d6545588d7ff9b47101fe2d0d1280069c2254275caf90c5db95e02c95c2","signature":"60431984f24d016d11104ab72b4d2f49e64bd379627bf6903846815ed63a63fe"},{"version":"8a097dff56f7a9df9f0d099e472a2bbfc0458a216339f4518e7e6188ce29bcbc","signature":"6b068e399e00dfcaa1cf320a39587ec06fbb40db94ff0adb3508749c8634d77c"},{"version":"d1dc71213d324f0e882aba598b72e386c7770ebb71ae1435cdaa2bcdda362cc1","signature":"6b068e399e00dfcaa1cf320a39587ec06fbb40db94ff0adb3508749c8634d77c"},{"version":"eb5bd03afd30cee73f8ac1ea025169963b86ec8d37853e8f7ae16fd06b98fdc4","signature":"b82ca94dad8e235588cdba1ab7661ac7e17a1d714398d7ef12573549fc81127a"},{"version":"1112723954173b83f679fdf3d528dde3d70edabb8232602f3a0892aac032a78b","signature":"87ed88cf4d218b1da179801cd77c3d78cf045fc4d7f6447b99378a2d1f18119d"},{"version":"60602c57f5d767045ffe824c29dc24c644dcfb7905d6e0f252bb06194d9ee19e","signature":"ce38a92d6b07e8b610a1e01a66751772b90afd94beff8eb3e9c73fdd5d8d10c5"},{"version":"c9c42d5948aa033c444cb6a3c188bcd925997bcc2bd8e97928af480ee356417f","impliedFormat":1},{"version":"f4bb2d3708ccd853dac13f97ede135d721bf5c2586f73ab8f1170f439e44b5b4","impliedFormat":1},{"version":"fd5649816766f52b1f86aa290fd07802d26cbb3b66df8ed788a0381494ebd5ed","impliedFormat":1},{"version":"269a13226bf6847c953f01ada5aefe59a3963a3a74f98c866ccbf08679d16b86","impliedFormat":1},{"version":"b769494ac41040c4c26eb6b268d519db4cc8853523d9d6863bee472a08f77f80","impliedFormat":1},{"version":"2fe42f88e2d318ede2a2f84283e36fdb9bd1448cd36b4a66f4ead846c48c1a33","impliedFormat":1},{"version":"cb403dfd16fdbdfd38aa13527bcbb7d15445374bc1c947cfcc3a9e6b514418ab","impliedFormat":1},{"version":"60810cf2adc328fa95c85a0ce2fd10842b8985c97a2832802656166950f8d164","impliedFormat":1},{"version":"de54c75cad3c584e18a8392a9a7e0668b735cd6b81a3f8433e18b5507fd68049","impliedFormat":1},{"version":"c477e5c4e8a805010af88a67996440ba61f826b1ced55e05423ad1b026338582","impliedFormat":1},{"version":"6b419ab45dc8cb943a1da4259a65f203b4bd1d4b67ac4522e43b40d2e424bdd6","impliedFormat":1},{"version":"a364ff73bf9b7b301c73730130aed0b3ca51454a4690922fc4ce0975b6e20a33","impliedFormat":1},{"version":"ef113fa4d5404c269863879ff8c9790aa238e577477d53c781cdae1e4552a0cf","impliedFormat":1},{"version":"5bfa561404d8a4b72b3ab8f2a9e218ab3ebb92a552811c88c878465751b72005","impliedFormat":1},{"version":"45a384db52cf8656860fc79ca496377b60ae93c0966ea65c7b1021d1d196d552","impliedFormat":1},{"version":"b2db0d237108fa98b859197d9fb1e9204915971239edbf63ed418b210e318fb8","impliedFormat":1},{"version":"93470daf956b2faa5f470b910d18b0876cfa3d1f5d7184e9aeafd8de86a30229","impliedFormat":1},{"version":"d472c153510dc0fd95624ad22711d264097ff0518059764981736f7aa94d0fa6","impliedFormat":1},{"version":"01fdef99a0d07e88a5f79d67e0142fc399302a8d679997aac07a901d4cf0fc83","impliedFormat":1},{"version":"ffcbdda683402303fa8845faf9a8fbb068723e08862b9689fc5a37c70ef989b8","impliedFormat":1},{"version":"208c5d0173b66b96c87c659d2decb774be70fb7a5d5af599a5d05f842b2e8d74","impliedFormat":1},{"version":"ec3b09b073a5e8a14fd5932cc4c33efaa0280c967d15bbc4c0c5b73a0d2f1a68","impliedFormat":1},{"version":"4b4c884e11985025294a651092f55dcbf588646d704e339674dfe51bdeead853","impliedFormat":1},{"version":"78c8b34f69c45078c6a3a3f10a24f1a03ea98495b6d75b945c1a3408a3ce5a26","impliedFormat":1},{"version":"0b1a08da571520eb288eb75843aad95d07fed423aba18b1149b5a0c767baf688","impliedFormat":1},{"version":"9c4708e703c8deb525e95946b3fdd8d5caaf724b3ac4a1cd6c2cab759b53f76f","impliedFormat":1},{"version":"ed14fb238769ed0b0dff6b78bef5263f0f50f403878ecd609fc71774b2113b12","impliedFormat":1},{"version":"59405847661d05bec9243efe9498211cb7e66d2620fe946e40750ffcb9e7d56a","impliedFormat":1},{"version":"ef95961bc90e8972bc9d88bee5264544d916929c0240e8c3c8ae220568b26ead","impliedFormat":1},{"version":"3f64230713c989e5f2d1d46c13fc8b2d9193b5dd59d393d5e70098c221894b1e","impliedFormat":1},{"version":"e49eeb0f93ea6a311a22f5b66a155c368e9cdb3585695fd951945df1a4192eb7","impliedFormat":1},{"version":"6f704837b406e4ac6ec5942018691ecc10e2d079cd64706d8ed1e86826d0671e","impliedFormat":1},{"version":"ee2229f4fc2d2306c864e5c2399aaa5958e4b3e1c964701fb8a84709237c9f47","impliedFormat":1},{"version":"6e5563614d424223f4748c6b714e1e197c8422824ff42fdc16f64484e1a863a6","impliedFormat":1},{"version":"8f31673ebf988cfc4b7ce2adb6a6c489dd748025600d8e2b7d922f952d7d21af","impliedFormat":1},{"version":"fd3715f87964b5fc26f4c333422969da8ca45e69e3fb6973ba6c806f437eb012","impliedFormat":1},{"version":"97b1e695f57dd56a6495f7bdca876981cc8db1cc4a555c3964aa14ce26e0f4de","impliedFormat":1},{"version":"cf32c06d23f373f81db3e93d47b7006f5bfc005df4d92bf5407b7792adcb3c47","impliedFormat":1},{"version":"eacc624e44f4b61dae0502e59ca5c0307dee65e7c257ee3eab4b2c8c6f156cd9","impliedFormat":1},{"version":"6041c1c22cb701abf3d98f153f878b12280f3b2213144588209b66ad5f5915dd","impliedFormat":1},{"version":"d95c6fb6552ca855ed11cdcaa5c68ad484bdc6325fd86fbadccdebfe57ed841b","impliedFormat":1},{"version":"0063b3ff097c4542be10322c67ca804e9e4504545b46ae8d620ceab59349ee84","impliedFormat":1},{"version":"9ff44b788f5d8d86f6fa34abf3faec8c425ecf1838248318acb0c5a4c88e62e7","impliedFormat":1},{"version":"4169cb216a6b361ba3caadf4a13670354e2a68ce055f4ec77ae7688902d2ab2d","impliedFormat":1},{"version":"e642a86d8e0956bb7c76aec21b83bde20409b19eb22786ed72ac5515aa9268c8","impliedFormat":1},{"version":"879e2a34d0139f04a32974fdfa44c5720619afd28f8bde0e5860f371d5f65d34","impliedFormat":1},{"version":"8e04860bdf072d4270b09b33b2b91ec4545297f23cc580041cad3e738f58d92c","impliedFormat":1},{"version":"bff595611ce25571f0cb50a83b7dcd7599559d6d3e98bf4fe87ad77b9c347664","impliedFormat":1},{"version":"2eced6af832d4e69811e353c7751f73bba07dc3b63189e0fa963e8264f341c12","impliedFormat":1},{"version":"a884b3560c8a29e5cb7f1263d880ff5c8b017991009edc20f450027c4a112b3f","impliedFormat":1},{"version":"6775c3e28d13ee126ec2c2e0827ec76422b0e11d9d5c2cfdfa7b982d48455fff","impliedFormat":1},{"version":"2ab0ffd4cdaff94c5cb8701f34442f8a018a2b62623528a66ad1ad8172ac6626","impliedFormat":1},{"version":"ea8215cf7cab1015579eac88e2f16fa1fabbe9f84ce4d2848c10f36d7df8ca1d","impliedFormat":1},{"version":"cc894fd562a73055ff72dcb7821729cef909b85bca4d0e2e2cbd0c1a2ecadeba","impliedFormat":1},{"version":"ab058bf3dbdbde6571f97a57a3b52b14be9d7e19f23190e9a551d5d6f6b6563f","impliedFormat":1},{"version":"142892cddebce23312318d79014de94e64a1085b8b0d73b942b4a6ce40a1b18d","impliedFormat":1},{"version":"db84257986e870ab22b304a80b02ea5e079c13a7f7be7891c0950bfd9e33f915","impliedFormat":1},{"version":"24cb43d567d33ac17daaad4e86cd52aba2bb8ff2196d8e1e7f0802faeeb39e95","impliedFormat":1},{"version":"dc6e0137694a7048ceba1ce02e6a57ab77573c38b1d41b36ae8e2e092b04ced2","impliedFormat":1},{"version":"aca624f59f59e63a55f8a5743f02fffc81dd270916e65fcd0edb3d4839641fbe","impliedFormat":1},{"version":"ce47b859c7ada1fbb72b66078a0cade8a234c7ae2ee966f39a21aada85b69dc0","impliedFormat":1},{"version":"389afe4c6734c505044a3a35477b118de0c54a1ae945ad454a065dc9446130a4","impliedFormat":1},{"version":"a44e6996f02661be9aa5c08bce6c2117b675211e92b6e552293e0682325f303e","impliedFormat":1},{"version":"b674f6631098d532a779f21fa6e9bdfca23718614f51d212089c355f27eea479","impliedFormat":1},{"version":"9dbc2b9b24df7b3a609c746eaada8bbc8a49a228d8801e076628d5a067ff3cc3","impliedFormat":1},{"version":"d6ea60339acf1584f623c91f5214be0ac654c0692c0c3abd69a601fe0ff0e165","impliedFormat":1},{"version":"d08badb0bbee55e449ea9ea7e7978cc94859804c49bdc7dc73e25d348337c0da","impliedFormat":1},{"version":"b116a03deacf70767f572c96a833e3c1adf01fff5c47f6c23e7bcb60c71359ba","impliedFormat":1},{"version":"023aedd02204fce1597fd16d7c0f1d7be13fcf4bc1ed28fb30a39587715ea000","impliedFormat":1},{"version":"b18adf3f8103e0711fbe633893cfbce2897f745554058cffa9273348366304d2","impliedFormat":1},{"version":"f41fbddb4a2c67dbf13863507b50f416c2645e7440895ea698605541d5038754","impliedFormat":1},{"version":"636a0fc7a5ee207de956241b8cc821305c8cc72b9f0bec69b9c9de15a9eafcfe","impliedFormat":1},{"version":"c326f85f762b14708a25b9f5c84691562f5cf39ae9148c00f990b8b4a2a4461a","impliedFormat":1},{"version":"caef5b191982cd88619282b10e1c52c3cde8c81d4eaf4650b4e62d73f77483d4","impliedFormat":1},{"version":"67759e9a92dc9e76be40019d7d2f5616bb1e0307c9935ece1f86b39f531811bd","signature":"572661c7274a7a2e851c811600536f38f0aeb617f480596c6bfaa2c76c575ac1"},{"version":"36d7b8ded6867fa2eaba8b55f41504d7d5db0967a86d72635d34bcf10cd8b34e","signature":"04ffa140faf9afaaef959427e3d915547136779fe8b0489552f4e51f720041df"},{"version":"b5277460e6c08d01ab6acf7386b4bceffc67d2afb98335d2db6b33a668099874","signature":"caf1101b3030a602c7800d3ca21e22054e350ca16b5bd55def0c7605f96135ca"},{"version":"78c1eac4fadcf916d09bef94daeab7d032610da7632d1c2483e1a79e0fa614da","signature":"e4df14de67b46c721819c143860dce6532f4325ec928fae3c86bc28ed15470d1"},{"version":"9ff194a196707954313c197ff74831edf396ee89f6b6e50cd5fe9e07b8d7d46b","impliedFormat":1},{"version":"7af2cded11e7ce2a54233ec5eae020dda35621f22de86e892416adb043b081fc","signature":"5b0016407f298eb4b0e2d455811c7d5ba29fa2a28e6862cda7a23cd1a8902a8a"},{"version":"85ca8e59de5ad36ab068b146778b205a9b0b963ddce95f0a85d6105a07ab55d9","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},"c1d4d4444aba9b01cb64dd485fe7c8ed3575fae862bc5977db4836ba02890a6a",{"version":"fa7f2e8b69aa84a64dcf0417f8a8d9719b11af3776c4c1ef35f63e9895cde3b2","signature":"61402ffe48f427afeb8a9905bfde958d8a875b4a73b010408eeafb6938552fb2"},{"version":"daae3fef862be66a4f3d019dbca43534e1e84c56b4b488ebdadcf71d7c93ac4d","signature":"69cb2e721e96bd522ad548f4c9e29b8789deff2fcf3a51a0c6aae39137cdd730"},"bdd3a7ac1f79283acbc594a8d7b17fb3186eb7ff42d19b57f113f7cfecc05ed1",{"version":"95d4125fa23520b53f94144c541372f2e4aacf495ba6c6f01a76e6ab4aa7f39a","signature":"91cc7881f1d3daf49a57b874ab0a6920824323c116fcda15210a9c83354d9024"},{"version":"471d2936b56890579899605818de833a454f2e8950a1816394a79d492ba9d94b","signature":"f7cf47465eeec9cca25e00b2c80eec701edd264296761cede900834f5ec8f0dc"},"297ba6d7e4e8c638f366363cb8d85141fdb1c2daaa6b06ba257eac005ac978fb",{"version":"0baddfc43f36b1b20d5b3f08162039f860d19470299795b17c44eb8631d4d956","signature":"6169ae88a69aa1c5c1da434f7d152c30a1b7933dc0ae68d1d8dbdaf952d0a3f0"},{"version":"10252be95a2e479a4434d42db379a2331359386072e9a15b2b3e366020616c4c","signature":"21dbb0edf7bbb55dbea374086764d613fbda1fc91513fe3d7fb659f01abe8488"},{"version":"62612748bead131af42d1680779fe254cfa5a59e87a484fa22e078bdc9978d10","signature":"109281b0c2cb0b694a3df77236aa739504c8041f210149af581bb4226b3b7fe0"},{"version":"8eb25039b561bc9f7994190dafa895ef1c3438a7576de564f57cc8e7f9f9c47f","signature":"0fede8a2334c7b8c664ca7026725f5c4cfa6b3a742da12b6496e03ffe9dafd7c"},"ea79deb2c6f4040dc55bd04e4a37ea36858d7e59ae354ebc0eccaa2698fcfeb5","91883e5a7e00b0bc6e87ac5989af4c21de2377268e6bc15379ec1eaae601db50",{"version":"7c12eca255521629498c645929488f10adfc8c6e03cd4e343115718e5cbec0b1","signature":"ed551f11e60e954e5684991e4587ebf9e2e66f5d460e925ca064ab90a3bd1fb5"},{"version":"4c15633afa04ae5207867257f5a56ab0e76c10be5e9ae6b9f9ce7be9a03cd67a","signature":"14967d27c8c9ab215d7e1c9ec3663e6f9a1b1c85f515287a51c1e269646ef7e0"},{"version":"a0630ded9a175c1fc3fca8488e5b04c3954565bd723cbf89e997fde070c2c8c3","signature":"b235d72f7b8f214e148e3eb9d7c7173bdd58a9a470e1b168eb493d047c06dc28"},{"version":"3b33ec1a7c1ba2685df026fee39a51c6f7a1db65ebedd9489e50187bf74b6812","signature":"b62c4d220735f1e4e3e293424c16b416cb393dbe6e0a16f5f6c878828403ead9"},{"version":"3dacc5b5e74ed8864cf1b499d718e937bcec987edff316303d84b0738bb8c28c","signature":"a388248c3501e1b917d6e23450c037e94dc5985dad5ccb748b9a3af42222c0b4"},{"version":"0ad9e60592042393bc127a9f930f47da6391cc7d8ff9afc7a63da641b463d052","signature":"383ed1621a32172eba20123a7055e4ff5461af5c8020219c620b9da657f23cbb"},{"version":"1750df344be53385979e126bf8411a36b545091d74f719327c805e77bd5abdef","signature":"8c0b9211fd75721d449c9250a1abe94637c0022d0189c555cfef9ec21173ecbd"},{"version":"ac572c40e3f87e53112b34060575b5450efbdc11fcb6f077a5e4d1979a10c994","signature":"d8a85502009fd40ef5758688602b7ab4105e5ffa90c129da15a37c4fd32adbba"},{"version":"4b2b3a557bb745adc2003f01ac67a42ffaec553b3363e84c455e304818de8411","signature":"fe880f4ac0e592b24d66aaf190a58dcfb0e0792a669a12af3a54a37f681b282e"},{"version":"41b37536c68576a51e4a027a6c057de6e3f581967fbdfef4d88e56ce3cd9754a","signature":"db8d5d6d2b58ae9b2c66190f35db0f4181ccfd37263c83d9e23a1030d13956df"},{"version":"d763c69fddb176fcae60ee69e091f9ae4b9ef8247abe142ef034b04d9855dd34","signature":"66f91078b7b81b850862ad709c4e6280031f9b0759169e06f9cf0e2a8c93f3fe"},{"version":"ecc2e5e7824d6de1118b83f4d4e3ba4315ac3100ad3b334f091309c38041c34e","signature":"90f59b4ea8a4fbd503e2e871a05e1bd160563857a65b98415b7eee6870b2cc55"},{"version":"48af7517257558314b62056f4ac95d2eb262d4af1489cd925d6f799d5a01904b","signature":"914f7fb0224db3edf12b88260a241c0510251cf6235365d957a373c3b7908bf2"},{"version":"43e1113c7fb7a8d33aa20e34a2b9dc8ee5802f95fc5cf9876169931b2934fc33","signature":"420937680b542114a25ac81bf07c834427be730c5d5dfbb6e9e673cfadc523bf"},{"version":"45f46f7810e24cd766508538e7184733a5b8e3bce1796cfd131fc5a51a9a6260","signature":"e179a2e4e15a3463c0accd58a3cf8f93802e65b13ef4f886978f2d66204e02d3"},{"version":"6c298f95b95399bd38f4bffbd92fc2934e7acd8c700d09d178aa5e4aa99eae3c","signature":"aa8e48362ea3c443635d0c6b8cb46032bf4fa37206e7baabcfa37d4d0a26fc30"},{"version":"dbc5d120ae090bc3b86c888ab051cfacf5e6e214ecfbeada46d3da75039c5012","signature":"05c5b3909dcff6e1e3309ad1b8322d977ca0453ed03429c2aa33ac2bd45ed229"},{"version":"f3f28aaf7089d69817203730645c71ebe7b21f0b29bef967f4b61b51b27990ed","signature":"3dd19b2e197c44aee2e4c1c3b3c7cc9cd4afd75533ddb77aa469bf633f33740c"},{"version":"313c8aafe4e94425f066c93067550d37ca0b15621e1086595a53dea95a974b45","signature":"7a447468a52ee94492482174f65a14994440854501c143a519d9bb469573749a"},{"version":"29271907eff0763b42558502632c8a3967be0df3c27432fdabcf0429266157e7","signature":"ffe80270c15b12a818ae8570eb9ea1fc2cd0383c543966aff6030f6980022e3a"},{"version":"1f43bc59dff60fd58fb5115edc06dbf752022ff4ce091f339879265ed79e1143","signature":"c1660dc4115ae9d89c4806730e90f532e4848437d2b670f9c7f492d0d37b75b8"},{"version":"fa0267687f9ea8b57f4404ab5f6ce654b89ebf2221a09175d56a8b30df74f636","signature":"b43ac93734ccb5f35bd6d939e862c19405d1ccf752522075810c3230262746c9"},{"version":"9a59d5981c4cf2e0574120a1d9c8abe5a18a00e9059f5c3eb499daf22fe12154","signature":"2298c65c524016391e7f79b937ee215398e863df1e7e85488c13475350a96f92"},{"version":"f031e290da3a6623e47c7d36933f8fbc5cd1c8b50c391e7e3d81366e07a2f613","signature":"86130004e2396f6825b1a328ac03678a9778be0496db00ffcbc6d9fa382df7d4"},{"version":"2ab3f67c979d3939bd52826532d24ac26cad3ed138c03cc468245fdba7beb290","signature":"9f3d5dfd1d6fb14a43287e7c42d2c49fc56bbfd2f71373c493a82827a02a9b35"},{"version":"498c2abd4fd3d4068cac59a57e26311229e155651b2b589fb1784451eec77d14","signature":"bf0ea882649b6707ff836a829e8f42b3cbdf167b98154b2233cd4458319e83da"},{"version":"9d7f4716d0d172817827aef036d4a39e7a95b3af1aec1614572fd271fa148de8","signature":"81d5770d0ee1ee2232d9509a00258df59e9f102eebc52a608e64cac3588a9a44"},{"version":"55a914fba7f17f73eb971e012bcb90221d5dca20751852c217428a5511db57a4","impliedFormat":99},{"version":"d9b54195cd22859480b70a2e287c41e654c812b0d3945652bd08c8943ddef78b","impliedFormat":99},{"version":"73b32be132963c6e06bb2f833ea0c21116581a3aafc8ac9145cc89a0b6f54bc0","impliedFormat":99},{"version":"73597a22736b6efce7cb30e380705cd6572d9e3f9816068130ec09550129996f","impliedFormat":99},{"version":"04504c465aabfed05529bf3b314df66c4eb449b188547c51edb962d8eb6069e0","impliedFormat":99},{"version":"09466b34e26295ee836861fa6348aff7b2275c6220cc0b41040c9949421e052f","impliedFormat":99},{"version":"242ce683695df72f1cdd40ae2ac06c569412e533528de95d956b26218cd195f5","impliedFormat":99},{"version":"d75a572cfd779c99cbdab5f8f44f6ce465367c057c07e33364d186de41ad9b14","impliedFormat":99},{"version":"8d12c3032607835687037e28dc245a4af486ef4aa6e6cb13744dcb0a3b074ab4","impliedFormat":99},{"version":"7ee2d1edc6f59a50eaeb12ac61a74ab4832f64661f795131df23ac8256df2329","impliedFormat":99},{"version":"8fea385f7e21a39e857e3fae89eabde7b0960083d205177430be507b38413579","impliedFormat":99},{"version":"7fdb8950d8a019940182ff1f50d02809a45832121b9a7899677a497aaba506ce","impliedFormat":99},{"version":"530e23db4425868edfc20e35fe2d8acf047af5b6f14afa46ee2e0e71e40c8df1","impliedFormat":99},{"version":"7cf421c4c6e223d2b648dae0ea51a134c4c8a5d8d55db1287372c4c1569c656f","impliedFormat":99},{"version":"ee662f8ffa58a60ca3ca8c141d4910043216efe63f696146b6fa0a455a4f9034","impliedFormat":99},{"version":"4eb4f2e56895129861a971177f8e9241ccf633daae3a6ac7343b92e973381c26","impliedFormat":99},{"version":"c75223aab2bfbe3fe85211fe56cfc844dd93d33e503e22e9911fd0d3e6f6538f","impliedFormat":99},{"version":"8fcea3d952a8129821d4060969f305a341706c256cb8002aba8e5b07088c24ed","impliedFormat":99},{"version":"2a6cef87ea83b5bdbc862e894329ba11002e76d5fb6ab24247502ecad2c6fbe7","impliedFormat":99},{"version":"39248c14bedc3e2d734739452408661523228ec790d7142a4de185ae88904da4","impliedFormat":99},{"version":"c14433af8654964ed33f9cc16f9369e05ae543d56bbc6a1c3b393fa7077f08a1","impliedFormat":99},{"version":"d867a5469eabe8abab25b27abb7125ef2ba019ef42dd1ca2b5d0871513042629","impliedFormat":99},{"version":"89fc4cad6ac7ac6d922523b3ab51462b050189ab335766149e5cc777483d4e1b","impliedFormat":1},{"version":"c031417387ddbb2923f41e3fc94b49157745785281c8949a221cd69368610086","impliedFormat":1},{"version":"73ef706b29d220404677226880137ad0da0145b6a2332d5427b9517dee295e70","impliedFormat":99},{"version":"89fc4cad6ac7ac6d922523b3ab51462b050189ab335766149e5cc777483d4e1b","impliedFormat":1},{"version":"27b14b091ccf309c79f3d2cf226edfa4d533b131f19bc0cbe855adebd464c285","impliedFormat":99},{"version":"50854b8ef4c29f3e952f170aaa045604a9d90360b680ddaeff542d1f5bb5fa8c","impliedFormat":99},{"version":"caa3a0be5c051f52e27b91642c8b31037c09ad0b65288498f4c55e33be7ea249","impliedFormat":99},{"version":"48020f2aa87dd71c26414f9afdf172159a6c31186705417da52add9d6cfe2153","impliedFormat":99},{"version":"f4e5a6883146482d6b49c1406f99a38b1ef883382b169bb5fc6cf7cf9f2ac70c","impliedFormat":99},{"version":"8b7b4f82a54a847a29fa481af4ea74372c19b75379bd27658c2a819149f21871","impliedFormat":99},{"version":"4f7faca5821e340342ea0feb3d478126659ece37d5dfdd6d9c9536bfd48def34","impliedFormat":99},{"version":"99878cc85152e70be715546f165826d83cf033547b4647cc3cc9cbd6d4df429a","impliedFormat":99},{"version":"7677f5595e7bdc2e6e42ebe8b4df4f4b520b28f6f175c839b73a208e6f3c8907","impliedFormat":99},{"version":"fd7faa9225e2e61a0a3d786a7a859af52dcb295c06bce7dfca140037655dc095","impliedFormat":99},{"version":"af0f7e3281ab0774f26ca8bc36d6aa37709f3510c8c1eb0ab122e7063159be01","impliedFormat":99},{"version":"960096f9e2ff9e9019e1c23a04916f2005d4c8dbd43f96b196d754b6c8a16700","impliedFormat":99},{"version":"c7c18305c761411b3c168f2b3376101b60d7a7d7c0505e81c6d8193a418f3d63","impliedFormat":99},{"version":"6b9a76dbc0ac3a427aa7370981cea9aea0e8286453b189dd03776f1034f7847c","impliedFormat":99},{"version":"3e48026dd0f58d4668dbfa9c6747302dcbc52e3aec373ec1f95c2ba78c308f33","impliedFormat":99},{"version":"053f54680ea9b4b1a8e9e5fe9f4a1fdcbc00f8f9b6d895109eb0d169915dfd11","impliedFormat":99},{"version":"3b0f440d9e4227285cec9159b1a472bc885687baf227a7b4126e2ba6dbef96fc","impliedFormat":99},{"version":"656e3a4ac005fcb1513ab1224eacfd55ae04b6f16d21d66c971dc901dad62c66","impliedFormat":99},{"version":"ea4891706f147e494a2a7028b2376110c2e85b7561b27448d51a7d1277c6fcf2","impliedFormat":99},{"version":"7f9bb3e6bb8d0607f94d1498c5fa8ac7445fcb4af52d0775a857d0986e0d0c84","impliedFormat":99},{"version":"c98c85d5b894c8955950338b1091f0febdc6c6702cf3b67a171d29d80fb2dfce","impliedFormat":99},{"version":"d00addf28fd877e3f8109b592b1918084cfb831268a0fd052fa72e6e01390cca","impliedFormat":99},{"version":"0cc0f30db3c4a2577606c6930eac2814d0463148d1bf02be9eaa318d6cb6d40e","impliedFormat":99},{"version":"21fb062824012292b09e9357aa7ac3231a0d683a7fbb9bc8e2b027346c7bcb32","impliedFormat":99},{"version":"9aa939dd1371c068dcda7d17c32fcbee08fa994890fefac8ad39d8cd5a294d92","impliedFormat":99},{"version":"8c0e829b03024d1905dba908ed55a5808d79159709770fe7a3b0395fa78125c6","impliedFormat":99},{"version":"15e6253aeb724521fcd0fd8bab60ac00b40e1b6c39aabb0de3b3e45ebe2d584a","impliedFormat":99},{"version":"4d3a0370e69c2d70d62a2eaeb40512474e38b4dff1a4e7ac98637f954ec5c143","impliedFormat":99},{"version":"b0094b81741504d0282359218e3659f5282b9748ad0e80d9a1c634bc1c88af4b","impliedFormat":99},{"version":"2c8e3d7848994c490cace467a6aae3fc4908e5b577b5ab0996200497062bb80b","impliedFormat":99},{"version":"6db32445cedcfaf6f6a4dbb922cdaf87e1cfc0422e4a31efeebef3fb0eb1a93b","impliedFormat":99},{"version":"b5102cfc507fe0c916a9ad45f4f52e00e3959b90eb90c5873e9527cb37eadb78","impliedFormat":99},{"version":"21e3abbcf80dc69638d138f5c6d07f596f8a162a8dca3bd71286403a96f8d0ab","impliedFormat":99},{"version":"20eab98ea24e9bf8834db1a339abb373e6f6a268537efa1fd571cd3809839eb1","impliedFormat":99},{"version":"796885a2efe76d5bef797516bd3a798b275f81075da8497fc1f6a9d3e085f2a8","impliedFormat":99},{"version":"b5a2192e328273da5a8279add3052bbc33b1adecb15f34a577c69c4dd2766d8e","impliedFormat":99},{"version":"20126c8c53f22550e68edb187f5d4d477b79a2effe7801fff3aa47949219d67b","impliedFormat":99},{"version":"8b63cf9a4a5bafaa3d2e157e6d07bb20d0d73fe0c5ddda715342a48d18534154","impliedFormat":99},{"version":"369dd195a978dcb88d63f1f1878e5dabb90bbc79b3e5fb0f16cf06209ab9e7aa","impliedFormat":99},{"version":"090b7d0fd37b238e003029b9137d5dff073791e21adaac556dd7524ed9ed977e","impliedFormat":99},{"version":"efedab846f4656f034814230fc05513b8cefb5f95994faee4f9b174c98bfef41","impliedFormat":99},{"version":"4f8876f00aa99ae0b39d6bca9da9e86f426dc6c458558773a647100a85fc3312","impliedFormat":99},{"version":"a13e1f68a2a1f29ceac30f51562e13677a5b8615377af952f0b7d1f9edff34f4","impliedFormat":99},{"version":"06f1e24d4146a779e7fd7a0f0cfdcdcb878da25e271e1e7d5d7f81d874f2dbec","impliedFormat":99},{"version":"0a3ede23be099f3ad266a10b4ad0cfb6efd446b9951f553274706348c3b56dae","impliedFormat":99},{"version":"c7b05cafd385f8988babecd476f4f9c817ecc68141dad54e2dd3ae458878a8f4","impliedFormat":99},{"version":"8fc8726fe9d96e0440518b06451181cabba87bdcb60a6e854b77e2b6dab52890","impliedFormat":99},{"version":"6cb381987d43f853d8d01c2fd5f32627e0c0f3a4dd1a11d5e3f94ff5832aff2b","impliedFormat":99},{"version":"ba0567434dbadd0fb8e80c4e00fb9c30449497f8bf07e82b2b857db0029f9b18","impliedFormat":99},{"version":"f72e417b7d49a5dec2d4f3857f6925ee78608cda1c42655d0179ccd38c66c15a","impliedFormat":99},{"version":"fdbb1158637d3ca4d209c7174270e5eb1414b4ee5324e9c33b1fae88e83bfc14","impliedFormat":99},{"version":"436cdc04f8ad3a54d2194b9926f52d564157ca162dcf3c9f71fa4711d057190b","impliedFormat":99},{"version":"73d9180a0b84dfb4c1a95bf72028103bd81472595617dd7ce788ea21639bcee4","impliedFormat":99},{"version":"55c1b951a4d7289a3056e2edea9855671a9d1f8f09632916ed1fb2aebb57b5c6","impliedFormat":99},{"version":"09b1271f73d90a01c889b4963a350825cff11493498b4141fde2399ce09de43a","impliedFormat":99},{"version":"bb9c7998d6def957496260f4c881ccc5b3d4eb4084ab00fbd8abc8c1e1ba67b7","impliedFormat":99},{"version":"340efc3f335a2a3ea2ca1899755906bcb6ebcbddf14306e66d0f16746db98273","impliedFormat":99},{"version":"6a691651e2748bf7792a251d820f00e8d9d3e4da1cdfbea91c33beda2bdd8b89","impliedFormat":99},{"version":"c3096b0c0f579462e17c525ee6835d82952c32b35061a1d32ac32d7e0f191da1","impliedFormat":99},{"version":"91b3c513f0ca4e2d0c5bc9ba1f43b169e1da7c49ff2cf5ffe730009c229f359f","impliedFormat":99},{"version":"ea0b435818ce832634961d1b65e972927f65a3c29a3e2c0cec3aafa0d7fe4ea0","impliedFormat":99},{"version":"50fe63347779cd2244429e0d54148fdb5d230dcc11f2bb8c7efc9d12c1e573d2","impliedFormat":99},{"version":"7adac175e5942f34a34f223d213bdd9869935ec6083dc6da836b996b7acdf7d5","impliedFormat":99},{"version":"2af0e322d1c39e8b16436cd9bd9c97b6013b75c179281df61afa10df0c722a1b","impliedFormat":99},{"version":"09b1271f73d90a01c889b4963a350825cff11493498b4141fde2399ce09de43a","impliedFormat":99},{"version":"0ef3eabd40fcec506413988e397ff7dcbed2aebfe4f88c486e2ba8dd1bc0ee0b","impliedFormat":99},{"version":"44dce86f2b5ef5e38fe6c068bc629afc04221adfa039f0dd649ae10f799f9ec8","impliedFormat":99},{"version":"5ad41356543df4a83b3ce069a7e628d2ba648399db0bdd4005bd1dfef26d34e2","impliedFormat":99},{"version":"0b448474270be29ded59bb946ac311c40c579ef0b9cf358a54750eef34359088","impliedFormat":99},{"version":"d7ddde645d6ca5b97f75923b3946e96495f81d7f4fd568201653f1939a3312a3","impliedFormat":99},{"version":"fb1148873f0d706261f8517b7ce3574b369c8213e8304c7c21cb9ca248b8dcc3","impliedFormat":99},{"version":"0637ec66edeed3f9ee0da72c0d5ab2c128db9e5a6226f8aca5672aa617db1726","impliedFormat":99},{"version":"ee49e1206cf12b67d5b72a98eaab773481130b87a9eeaa262086a4314d1cd991","impliedFormat":99},{"version":"9fa29d6f0b05ee8f619202c07680a46025b166da55e431a49c5badaa2983429b","impliedFormat":99},{"version":"f53857d23110842c0c62416b09caccb9286b3ba52fa2b6bbe254c58123d9bb09","impliedFormat":99},{"version":"89c02b0ad4fc44d10576b3e37c2c5262a37f2db171a486d2d5960ee60323bb96","impliedFormat":99},{"version":"59348badf356a43f7e1847364a8fdb8a914b9977a517b41f3ed206db36b875c1","impliedFormat":99},{"version":"ff0c09d8b0c8c0ffb09ef9250fac17c98eb4dd5a4f4955d53fc3880d6553b91b","impliedFormat":99},{"version":"07146d909fcbc1d33c5fc02f74dab3750d075a4de305a6c078fff8265e089c5e","impliedFormat":99},{"version":"b323496b42ebb7f2839ef1acb04947c74cc586c8ad20cc936c069d34b98a29ac","impliedFormat":99},{"version":"62159930f535b73f265f98f669c7f7bbdaef719ebc2de3a2bc4835e71ed68ba0","impliedFormat":99},{"version":"6ae1d121a8c1ff3398eff8af6e398868b631689d120076d7004c787479eacc61","impliedFormat":99},{"version":"d23bfd5a61fb32048f370f988a9772966651be1380c1a93c199d7cb25b7b0cf0","impliedFormat":99},{"version":"7344e1d823581d72124f6a328669abbeec44910c2045823bf7e7bef79ca49f73","impliedFormat":99},{"version":"af4a6e7559998dac4978f02c572d0f391928b6f40c62459c1e4ae5afc12995c7","impliedFormat":99},{"version":"b0a2a4c5ca7f6f874de72e39be8f470b348ec062c005cb5a7acc840fd7f67807","impliedFormat":99},{"version":"75083e759d8b09bcbf201a250c918a35221d05c7524cbb67b2b4d8959c919252","impliedFormat":99},{"version":"d89f7811a420d990b817f383c3fec421559063a7cb744fae619e8bba20dd151d","impliedFormat":99},{"version":"abd03428933117fdb9db45ac492eaac24d9a77c37c3944d26dba044b7fce6870","impliedFormat":99},{"version":"97050f022128934adae6a773a63be3c5bd5726f153fb72e9a8d34f2656135de2","impliedFormat":99},{"version":"3901f637d5f111593a5ea39a31d27e7a5f62195251f4ed6a50b77a020bc6e416","impliedFormat":99},{"version":"7edffa8d9c968f6a96b6ffc774be07717378ec619777e78510a7b6de4bfe67df","impliedFormat":99},{"version":"8f8d24c887f993b6c131075ac4f82cefbb246747b22c50491dc64ffd2cb340d9","impliedFormat":99},{"version":"5ffb8c07f5474d45bab306b6267ef2777ad786a841e0942416f485125cbd2385","impliedFormat":99},{"version":"e0d7a3cdfaa21621610dc3b74f8ccd59a5cd8617843ded1d610f05bf790adde6","impliedFormat":99},{"version":"b8f4165a3fa8fea167bb5016ad7629581d8fffb16447217d480c8a7ea438ed8d","impliedFormat":99},{"version":"b936b8e4ad57e3be1407c74e36645d31bebe7f1183d926a0c438cf416ec708f5","impliedFormat":99},{"version":"13fc27c27bc9a42e5e0c4cc08b64e7693b225c565bdab45ace16c179760f3cc9","impliedFormat":99},{"version":"8ff87eb5acdf565af022fb9145942b2207ac8cd0644917bc7d44efb91f4115d3","impliedFormat":99},{"version":"616ff480886a32cf50f73c4ee5fdd9672a5f21428eadcac34c41acb06035c214","impliedFormat":99},{"version":"f08e5842644a8e03da9efdbf89bf4eb61ea906a3bbc255bd7d7583756cb3dc61","impliedFormat":99},{"version":"562682efb4f43e58eb779a742f3e26c1fd796da0b785620de601202a38764785","impliedFormat":99},{"version":"264f935450101e4b000eb351cf75c9d799ca20a278b260a9e5770303b5f2b6a3","impliedFormat":99},{"version":"f6f171b23ae6db93454343f1b788960f799c8f37043904874a752c0990c6fca6","impliedFormat":99},{"version":"089f9928e7ab1ca2c225e167a80ff1cb5ed0a71c98be7e81f040a51e2cc6bf5e","impliedFormat":99},{"version":"b11acc27c280988d7256bbd8ffe9f1cb5a0e5ed17cddf5335289ee0e81500369","affectsGlobalScope":true,"impliedFormat":99},{"version":"02ab5dbcaa58da1d58c46c7cdfa7f94792c5ccf0fc7c0622ef33755fe415366c","impliedFormat":99},{"version":"e689cc8cd8a102d31c9d3a7b0db0028594202093c4aca25982b425e8ae744556","impliedFormat":99},{"version":"478e59ac0830a0f6360236632d0d589fb0211183aa1ab82292fbca529c0cce35","impliedFormat":99},{"version":"1b4ed9deaba72d4bc8495bf46db690dbf91040da0cb2401db10bad162732c0e2","impliedFormat":99},{"version":"cf60c9e69392dd40b81c02f9674792e8bc5b2aff91d1b468e3d19da8b18358f8","impliedFormat":99},{"version":"3e94295f73335c9122308a858445d2348949842579ac2bacd30728ab46fe75a7","impliedFormat":99},{"version":"8a778c0e0c2f0d9156ca87ab56556b7fd876a185960d829c7e9ed416d5be5fb4","impliedFormat":99},{"version":"b233a945227880b8100b0fec2a8916339fa061ccc23d2d9db4b4646a6cd9655f","impliedFormat":99},{"version":"54821272a9f633d5e8ec23714ece5559ae9a7acc576197fe255974ddbd9b05d6","impliedFormat":99},{"version":"e08685c946d49f555b523e481f4122b398c4444c55b164e5ac67c3ba878db8d1","impliedFormat":99},{"version":"3c99d5232a3c8b54016e5700502078af50fe917eb9cb4b6d9a75a0a3456fcd5d","impliedFormat":99},{"version":"9d8e34ec610435ee2708595564bbad809eab15c9e3fa01ad3746bbe9015faaed","impliedFormat":99},{"version":"7202a89bea0bdab87cc0ae60912b9e631a48f519b6a1f323dba8bc77a02a3481","impliedFormat":99},{"version":"f865343c121abc3516abf5b888d0c1b7596ec772229d8e4d4d796f89e8c9d0c0","impliedFormat":99},{"version":"77114bdbc7388aeeb188c85ebe27e38b1a6e29bc9fea6e09b7011bbb4d71ec41","impliedFormat":99},{"version":"3df489529e6dfe63250b187f1823a9d6006b86a7e9cac6b338944d5fc008db70","impliedFormat":99},{"version":"fe0d316062384b233b16caee26bf8c66f2efdcedcf497be08ad9bcea24bd2d2c","impliedFormat":99},{"version":"2f5846c85bd28a5e8ce93a6e8b67ad0fd6f5a9f7049c74e9c1f6628a0c10062a","impliedFormat":99},{"version":"7dfb517c06ecb1ca89d0b46444eae16ad53d0054e6ec9d82c38e3fbf381ff698","impliedFormat":99},{"version":"35999449fe3af6c7821c63cad3c41b99526113945c778f56c2ae970b4b35c490","impliedFormat":99},{"version":"1fff68ffb3b4a2bf1b6f7f4793f17d6a94c72ca8d67c1d0ac8a872483d23aaf2","impliedFormat":99},{"version":"6dd231d71a5c28f43983de7d91fb34c2c841b0d79c3be2e6bffeb2836d344f00","impliedFormat":99},{"version":"e6a96ceaa78397df35800bafd1069651832422126206e60e1046c3b15b6e5977","impliedFormat":99},{"version":"035dcab32722ff83675483f2608d21cb1ec7b0428b8dca87139f1b524c7fcdb5","impliedFormat":99},{"version":"605892c358273dffa8178aa455edf675c326c4197993f3d1287b120d09cee23f","impliedFormat":99},{"version":"a1caf633e62346bf432d548a0ae03d9288dc803c033412d52f6c4d065ef13c25","impliedFormat":99},{"version":"774f59be62f64cf91d01f9f84c52d9797a86ef7713ff7fc11c8815512be20d12","impliedFormat":99},{"version":"46fc114448951c7b7d9ed1f2cc314e8b9be05b655792ab39262c144c7398be9f","impliedFormat":99},{"version":"9be0a613d408a84fa06b3d748ca37fd83abf7448c534873633b7a1d473c21f76","impliedFormat":99},{"version":"f447ea732d033408efd829cf135cac4f920c4d2065fa926d7f019bff4e119630","impliedFormat":99},{"version":"09f1e21f95a70af0aa40680aaa7aadd7d97eb0ef3b61effd1810557e07e4f66a","impliedFormat":99},{"version":"a43ec5b51f6b4d3c53971d68d4522ef3d5d0b6727e0673a83a0a5d8c1ced6be2","impliedFormat":99},{"version":"c06578ae45a183ba9d35eee917b48ecfdec19bb43860ffc9947a7ab2145c8748","impliedFormat":99},{"version":"2a9b4fd6e99e31552e6c1861352c0f0f2efd6efb6eacf62aa22375b6df1684b1","impliedFormat":99},{"version":"ad9f4320035ac22a5d7f5346a38c9907d06ec35e28ec87e66768e336bc1b4d69","impliedFormat":99},{"version":"05a090d5fb9dc0b48e001b69dc13beaab56883d016e6c6835dbdaf4027d622d4","impliedFormat":99},{"version":"76edff84d1d0ad9cece05db594ebc8d55d6492c9f9cc211776d64b722f1908e0","impliedFormat":99},{"version":"ec7cef68bcd53fae06eecbf331bb3e7fdfbbf34ed0bbb1fb026811a3cd323cb4","impliedFormat":99},{"version":"36ea0d582c82f48990eea829818e7e84e1dd80c9dc26119803b735beac5ee025","impliedFormat":99},{"version":"9c3f927107fb7e1086611de817b1eb2c728da334812ddab9592580070c3d0754","impliedFormat":99},{"version":"eeae71425f0747a79f45381da8dd823d625a28c22c31dca659d62fcc8be159c2","impliedFormat":99},{"version":"d769fae4e2194e67a946d6c51bb8081cf7bd35688f9505951ad2fd293e570701","impliedFormat":99},{"version":"55ce8d5c56f615ae645811e512ddb9438168c0f70e2d536537f7e83cd6b7b4b0","impliedFormat":99},{"version":"fa1369ff60d8c69c1493e4d99f35f43089f0922531205d4040e540bb99c0af4f","impliedFormat":99},{"version":"a3382dd7ef2186ea109a6ee6850ca95db91293693c23f7294045034e7d4e3acf","impliedFormat":99},{"version":"2b1d213281f3aa615ae6c81397247800891be98deca0b8b2123681d736784374","impliedFormat":99},{"version":"c34e7a89ed828af658c88c87db249b579a61e116bea0c472d058e05a19bf5fa9","impliedFormat":99},{"version":"7ae166eb400af5825d3e89eea5783261627959809308d4e383f3c627f9dad3d8","impliedFormat":99},{"version":"69f64614a16f499e755db4951fcbb9cf6e6b722cc072c469b60d2ea9a7d3efe8","impliedFormat":99},{"version":"75df3b2101fc743f2e9443a99d4d53c462953c497497cce204d55fc1efb091e0","impliedFormat":99},{"version":"7dc0f40059b991a1624098161c88b4650644375cc748f4ac142888eb527e9ccd","impliedFormat":99},{"version":"a601809a87528d651b7e1501837d57bb840f47766f06e695949a85f3e58c6315","impliedFormat":99},{"version":"d64f68c9dbd079ad99ec9bae342e1b303da6ce5eac4160eb1ed2ef225a9e9b23","impliedFormat":99},{"version":"99c738354ecc1dba7f6364ed69b4e32f5b0ad6ec39f05e1ee485e1ee40b958eb","impliedFormat":99},{"version":"8cd2c3f1c7c15af539068573c2c77a35cc3a1c6914535275228b8ef934e93ae4","impliedFormat":99},{"version":"efb3ac710c156d408caa25dafd69ea6352257c4cebe80dba0f7554b9e903919c","impliedFormat":99},{"version":"260244548bc1c69fbb26f0a3bb7a65441ae24bcaee4fe0724cf0279596d97fb4","impliedFormat":99},{"version":"ce230ce8f34f70c65809e3ac64dfea499c5fd2f2e73cd2c6e9c7a2c5856215a8","impliedFormat":99},{"version":"0e154a7f40d689bd52af327dee00e988d659258af43ee822e125620bdd3e5519","impliedFormat":99},{"version":"cca506c38ef84e3f70e1a01b709dc98573044530807a74fe090798a8d4dc71ac","impliedFormat":99},{"version":"160dbb165463d553da188b8269b095a4636a48145b733acda60041de8fa0ae88","impliedFormat":99},{"version":"8b1deebfd2c3507964b3078743c1cb8dbef48e565ded3a5743063c5387dec62f","impliedFormat":99},{"version":"6a77c11718845ff230ac61f823221c09ec9a14e5edd4c9eae34eead3fc47e2c7","impliedFormat":99},{"version":"5a633dd8dcf5e35ee141c70e7c0a58df4f481fb44bce225019c75eed483be9be","impliedFormat":99},{"version":"f3fb008d3231c50435508ec6fd8a9e1fdc04dd75d4e56ec3879b08215da02e2c","impliedFormat":99},{"version":"9e4af21f88f57530eea7c963d5223b21de0ddccfd79550636e7618612cc33224","impliedFormat":99},{"version":"b48dd54bd70b7cf7310c671c2b5d21a4c50e882273787eeea62a430c378b041a","impliedFormat":99},{"version":"1302d4a20b1ce874c8c7c0af30051e28b7105dadaec0aebd45545fd365592f30","impliedFormat":99},{"version":"fd939887989692c614ea38129952e34eeca05802a0633cb5c85f3f3b00ce9dff","impliedFormat":99},{"version":"3040f5b3649c95d0df70ce7e7c3cce1d22549dd04ae05e655a40e54e4c6299de","impliedFormat":99},{"version":"de0bd5d5bd17ba2789f4a448964aba57e269a89d0499a521ccb08531d8892f55","impliedFormat":99},{"version":"921d42c7ec8dbefd1457f09466dadedb5855a71fa2637ad67f82ff1ed3ddc0d0","impliedFormat":99},{"version":"b0750451f8aec5c70df9e582ab794fab08dae83ea81bb96bf0b0976e0a2301ee","impliedFormat":99},{"version":"8ba931de83284a779d0524b6f8d6cf3956755fb41c8c8c41cd32caf464d27f05","impliedFormat":99},{"version":"4305804b3ae68aebb7ef164aabd7345c6b91aada8adda10db0227922b2c16502","impliedFormat":99},{"version":"96ae321ebb4b8dcdb57e9f8f92a3f8ddb50bdf534cf58e774281c7a90b502f66","impliedFormat":99},{"version":"934158ee729064a805c8d37713161fef46bf36aa9f0d0949f2cd665ded9e2444","impliedFormat":99},{"version":"6ef5957bb7e973ea49d2b04d739e8561bca5ae125925948491b3cfbd4bf6a553","impliedFormat":99},{"version":"6a32433315d54a605c4be53bf7248dfd784a051e8626aeb01a4e71294dd2747f","impliedFormat":99},{"version":"9476325d3457bfe059adfee87179a5c7d44ecbeec789ede9cfab8dc7b74c48db","impliedFormat":99},{"version":"4f1c9401c286c6fff7bbf2596feef20f76828c99e3ccb81f23d2bd33e72256aa","impliedFormat":99},{"version":"b711cdd39419677f7ca52dd050364d8f8d00ea781bb3252b19c71bdb7ec5423e","impliedFormat":99},{"version":"ee11e2318448babc4d95f7a31f9241823b0dfc4eada26c71ef6899ea06e6f46b","impliedFormat":99},{"version":"27a270826a46278ad5196a6dfc21cd6f9173481ca91443669199379772a32ae8","impliedFormat":99},{"version":"7c52f16314474cef2117a00f8b427dfa62c00e889e6484817dc4cabb9143ac73","impliedFormat":99},{"version":"6c72a60bb273bb1c9a03e64f161136af2eb8aacc23be0c29c8c3ece0ea75a919","impliedFormat":99},{"version":"6fa96d12a720bbad2c4e2c75ddffa8572ef9af4b00750d119a783e32aede3013","impliedFormat":99},{"version":"00128fe475159552deb7d2f8699974a30f25c848cf36448a20f10f1f29249696","impliedFormat":99},{"version":"e7bd1dc063eced5cd08738a5adbba56028b319b0781a8a4971472abf05b0efb4","impliedFormat":99},{"version":"2a92bdf4acbd620f12a8930f0e0ec70f1f0a90e3d9b90a5b0954aac6c1d2a39c","impliedFormat":99},{"version":"c8d08a1e9d91ad3f7d9c3862b30fa32ba4bc3ca8393adafdeeeb915275887b82","impliedFormat":99},{"version":"c0dd6b325d95454319f13802d291f4945556a3df50cf8eed54dbb6d0ade0de2f","impliedFormat":99},{"version":"0627ae8289f0107f1d8425904bb0daa9955481138ca5ba2f8b57707003c428d5","impliedFormat":99},{"version":"4d8c5cc34355bfb08441f6bc18bf31f416afbfa1c71b7b25255d66d349be7e14","impliedFormat":99},{"version":"b365233eaff00901f4709fa605ae164a8e1d304dc6c39b82f49dda3338bea2b0","impliedFormat":99},{"version":"456da89f7f4e0f3dc82afc7918090f550a8af51c72a3cfb9887cf7783d09a266","impliedFormat":99},{"version":"d9a2dcc08e20a9cf3cc56cd6e796611247a0e69aa51254811ec2eed5b63e4ba5","impliedFormat":99},{"version":"44abf5b087f6500ab9280da1e51a2682b985f110134488696ac5f84ae6be566c","impliedFormat":99},{"version":"ced7ef0f2429676d335307ad64116cd2cc727bb0ce29a070bb2992e675a8991e","impliedFormat":99},{"version":"0b73db1447d976759731255d45c5a6feff3d59b7856a1c4da057ab8ccf46dc84","impliedFormat":99},{"version":"3fc6f405e56a678370e4feb7a38afd909f77eb2e26fe153cdaea0fb3c42fbbee","impliedFormat":99},{"version":"2762ed7b9ceb45268b0a8023fd96f02df88f5eb2ad56851cbb3da110fd35fdb5","impliedFormat":99},{"version":"9c20802909ca00f79936c66d8315a5f7f2355d343359a1e51b521ec7a8cfa8bf","impliedFormat":99},{"version":"31ddfdf751c96959c458220cd417454b260ff5e88f66dddc33236343156eb22c","impliedFormat":99},{"version":"ec0339cf070b4dedf708aaed26b8da900a86b3396b30a4777afcd76e69462448","impliedFormat":99},{"version":"067eed0758f3e99f0b1cfe5e3948aa371cbb0f48a26db8c911772e50a9cc9283","impliedFormat":99},{"version":"7dfb9316cfbf2124903d9bc3721d6c19afbf5109dfbc2017ca8ae758f85178ab","impliedFormat":99},{"version":"919a7135fa54057cf42c8cd52165bf938baeb6df316b438bbf4d97f3174ff532","impliedFormat":99},{"version":"4a2957dfe878c8b49acb18299dfba2f72b8bf7a265b793916c0479b3d636b23b","impliedFormat":99},{"version":"fad6a11a73a787168630bf5276f8e8525ab56f897a6a0bf0d3795550201e9df5","impliedFormat":99},{"version":"0cc8d34354ec904617af9f1d569c29b90915634c06d61e7e74b74de26c9379d2","impliedFormat":99},{"version":"529b225f4de49eed08f5a8e5c0b3030699980a8ea130298ff9dfa385a99c2a76","impliedFormat":99},{"version":"77bb50ea87284de10139d000837e5cce037405ac2b699707e3f8766454a8c884","impliedFormat":99},{"version":"95c33ceea3574b974d7a2007fed54992c16b68472b25b426336ef9813e2e96e8","impliedFormat":99},{"version":"1ecb3c690b1bfdc8ea6aaa565415802e5c9012ec616a1d9fb6a2dbd15de7b9dc","impliedFormat":99},{"version":"57fc10e689d39484d5ae38b7fc5632c173d2d9f6f90196fc6a81d6087187ed03","impliedFormat":99},{"version":"f1fb180503fecd5b10428a872f284cc6de52053d4f81f53f7ec2df1c9760d0c0","impliedFormat":99},{"version":"d30d4de63fc781a5b9d8431a4b217cd8ca866d6dc7959c2ce8b7561d57a7213f","impliedFormat":99},{"version":"765896b848b82522a72b7f1837342f613d7c7d46e24752344e790d1f5b02810b","impliedFormat":99},{"version":"ee032efc2dd5c686680f097a676b8031726396a7a2083a4b0b0499b0d32a2aea","impliedFormat":99},{"version":"b76c65680c3160e6b92f5f32bc2e35bca72fedb854195126b26144fd191cd696","impliedFormat":99},{"version":"13e9a215593478bd90e44c1a494caf3c2079c426d5ad8023928261bfc4271c72","impliedFormat":99},{"version":"3e27476a10a715506f9bb196c9c8699a8fe952199233c5af428d801fdda56761","impliedFormat":99},{"version":"dbb9ad48b056876e59a7da5e1552c730b7fa27d59fcd5bf27fd7decc9d823bb8","impliedFormat":99},{"version":"4bd72a99a4273c273201ca6d1e4c77415d10aa24274089b7246d3d0e0084ca06","impliedFormat":99},{"version":"7ae03c4abb0c2d04f81d193895241b40355ae605ec16132c1f339c69552627c1","impliedFormat":99},{"version":"650eddf2807994621e8ca331a29cc5d4a093f5f7ff2f588c3bb7016d3fe4ae6a","impliedFormat":99},{"version":"615834ad3e9e9fe6505d8f657e1de837404a7366e35127fcb20e93e9a0fb1370","impliedFormat":99},{"version":"c3661daba5576b4255a3b157e46884151319d8a270ec37ca8f353c3546b12e9b","impliedFormat":99},{"version":"de4abffb7f7ba4fffbd5986f1fe1d9c73339793e9ac8175176f0d70d4e2c26d2","impliedFormat":99},{"version":"211513b39f80376a8428623bb4d11a8f7ef9cd5aa9adce243200698b84ce4dfb","impliedFormat":99},{"version":"9e8d2591367f2773368f9803f62273eb44ef34dd7dfdaa62ff2f671f30ee1165","impliedFormat":99},{"version":"0f3cef820a473cd90e8c4bdf43be376c7becfda2847174320add08d6a04b5e6e","impliedFormat":99},{"version":"20eed68bc1619806d1a8c501163873b760514b04fcf6a7d185c5595ff5baef65","impliedFormat":99},{"version":"620ef28641765cc6701be0d10d537b61868e6f54c9db153ae64d28187b51dbc0","impliedFormat":99},{"version":"341c8114357c0ec0b17a2a1a99aecbfc6bc0393df49ea6a66193d1e7a691b437","impliedFormat":99},{"version":"b01fe782d4c8efc30ab8f55fae1328898ad88a3b2362ba4daac2059bd30ef903","impliedFormat":99},{"version":"f8e8b33983efa33e28e045b68347341fc77f64821b7aabaac456d17b1781e5f4","impliedFormat":99},{"version":"8d3e416906fb559b9e4ad8b4c4a5f54aeadeb48702e4d0367ffba27483a2e822","impliedFormat":99},{"version":"47db572e8e1c12a37c9ac6bd7e3c88b38e169e3d7fd58cb8fb4a978651e3b121","impliedFormat":99},{"version":"a83a8785713569da150cded8e22c8c14b98b8802eb56167db5734157e23ee804","impliedFormat":99},{"version":"cce1c8b93d1e5ed8dcbaca2c4d346abb34da5c14fa51a1c2e5f93a31c214d8e9","impliedFormat":99},{"version":"213a867daad9eba39f37f264e72e7f2faa0bda9095837de58ab276046d61d97c","impliedFormat":99},{"version":"e1c2ba2ca44e3977d3a79d529940706cef16c9fdd9fd9cad836022643edff84f","impliedFormat":99},{"version":"d63bfe03c3113d5e5b6fcef0bed9cd905e391d523a222caa6d537e767f4e0127","impliedFormat":99},{"version":"4f0a99cb58b887865ae5eed873a34f24032b9a8d390aa27c11982e82f0560b0f","impliedFormat":99},{"version":"3c8a75636dc5639ebd8b0d9b27e5f99cdbc4e52df7f8144bc30e530a90310bbe","impliedFormat":99},{"version":"831ec85d8b9ce9460069612cb8ac6c1407ce45ccaa610a8ae53fe6398f4c1ffd","impliedFormat":99},{"version":"84a15a4f985193d563288b201cb1297f3b2e69cf24042e3f47ad14894bd38e74","impliedFormat":99},{"version":"ea9357f6a359e393d26d83d46f709bc9932a59da732e2c59ea0a46c7db70a8d2","impliedFormat":99},{"version":"2b26c09c593fea6a92facd6475954d4fba0bcc62fe7862849f0cc6073d2c6916","impliedFormat":99},{"version":"b56425afeb034738f443847132bcdec0653b89091e5ea836707338175e5cf014","impliedFormat":99},{"version":"7b3019addc0fd289ab1d174d00854502642f26bec1ae4dadd10ca04db0803a30","impliedFormat":99},{"version":"77883003a85bcfe75dc97d4bd07bd68f8603853d5aad11614c1c57a1204aaf03","impliedFormat":99},{"version":"a69755456ad2d38956b1e54b824556195497fbbb438052c9da5cce5a763a9148","impliedFormat":99},{"version":"c4ea7a4734875037bb04c39e9d9a34701b37784b2e83549b340c01e1851e9fca","impliedFormat":99},{"version":"bba563452954b858d18cc5de0aa8a343b70d58ec0369788b2ffd4c97aa8a8bd1","impliedFormat":99},{"version":"48dd38c566f454246dd0a335309bce001ab25a46be2b44b1988f580d576ae3b5","impliedFormat":99},{"version":"0362f8eccf01deee1ada6f9d899cf83e935970431d6b204a0a450b8a425f8143","impliedFormat":99},{"version":"942c02023b0411836b6d404fc290583309df4c50c0c3a5771051be8ecd832e8d","impliedFormat":99},{"version":"181655e54e8b288d671457be112383e6c51502cff5c4e39020c89f281a987307","impliedFormat":99},{"version":"27d7f5784622ac15e5f56c5d0be9aeefe069ed4855e36cc399c12f31818c40d4","impliedFormat":99},{"version":"0e5e37c5ee7966a03954ddcfc7b11c3faed715ee714a7d7b3f6aaf64173c9ac7","impliedFormat":99},{"version":"adcfd9aaf644eca652b521a4ebac738636c38e28826845dcd2e0dac2130ef539","impliedFormat":99},{"version":"fecc64892b1779fb8ee2f78682f7b4a981a10ed19868108d772bd5807c7fec4f","impliedFormat":99},{"version":"a68eb05fb9bfda476d616b68c2c37776e71cba95406d193b91e71a3369f2bbe7","impliedFormat":99},{"version":"0adf5fa16fe3c677bb0923bde787b4e7e1eb23bcc7b83f89d48d65a6eb563699","impliedFormat":99},{"version":"bf4a06264e6b80cc96fa5e6f11b05825126845563efbf5a68a5b18fddee833b1","impliedFormat":99},{"version":"560a6b3a1e8401fe5e947676dabca8bb337fa115dfd292e96a86f3561274a56d","impliedFormat":99},{"version":"b2e451d7958fb4e559df8470e78cbabd17bcebdf694c3ac05440b00ae685aadb","impliedFormat":1},{"version":"435b214f224e0bd2daa15376b7663fd6f5cb0e2bb3a4042672d6396686f7967b","impliedFormat":99},{"version":"5ac787a4a245d99203a12f93f1004db507735a7f3f16f3bc41d21997ccf54256","impliedFormat":99},{"version":"767a9d1487a4a83e6dbe19a56310706b92a77dc0e6c400aa288f48891c8af8d3","impliedFormat":99},{"version":"198f2246a78930833c24db9c42da7ab40c084c2e2132a899f9c03dcbe59d207d","impliedFormat":99},{"version":"eb07eea29499b56357f7593fbdbc6d2312d8afc32c14396952db8d897ea0c4c2","impliedFormat":99},{"version":"06efe54b5ceaa113fbc649424419746efde6dcd5af2a7d4472efb62d751801b3","impliedFormat":99},{"version":"39613fd5250b0e6b48f03d2c994f0135c55d64060c6a0486ecfd6344d4a90a7f","impliedFormat":99},{"version":"8dfbc0d30d20c17f8a9a4487ca14ca8fab6b7d6e0432378ba50cc689d4c07a73","impliedFormat":99},{"version":"4b91040a9b0a06d098defafb39f7e6794789d39c6be0cfd95d73dd3635ca7961","impliedFormat":99},{"version":"66b67d15116c453abd384a1ec73ad2cb90b19fff4c08289360c4f3f573465838","impliedFormat":99},{"version":"5805f6ee9c3a5369ba7f37a809e226f0b217d2059d6f699cc242c9907671143f","impliedFormat":99},{"version":"2f0578c52f2b95a2a2187ad6d1d8fa4e835278871c81747c500bf04bbe0301a2","impliedFormat":99},{"version":"ee9811c1b947c37077408d66bf61ca0f7e6ffad850ecec1e246e643c51fbb5e3","impliedFormat":99},{"version":"4e919bdf4100bc0338598352ad2778d4750fb0d5facbd1bc7c5210340a1f756d","impliedFormat":99},{"version":"4b54813a405270d710da2c598f57cc0c512aad7b5f34f8d2e109862020568a58","impliedFormat":99},{"version":"ac29a9fe4dc4829c7f3f693c7667483f9903ead6ac67abf8d6a5744a5578a7a4","impliedFormat":99},{"version":"5429b7f938113b40fa315e0f100220a5801992497bc3eb05e3b395055033a93c","impliedFormat":99},{"version":"aac828f821e824489c3f10a5452e05b7abc084894dcf6cef1855fe44c88d8556","impliedFormat":99},{"version":"9dda93662ba9cc072a048ed9717df4869820cdc84ebd33db3db6e1ef354f521a","impliedFormat":99},{"version":"a769f4df15ce86d72fdc646ef33bf9ad634e2d7f544399ca030b61d61c781942","impliedFormat":99},{"version":"e1848b9ea5d00c149eae78db2141cb099cd5cd0573064c03f24fada82b2a0d94","impliedFormat":99},{"version":"535dc92c4a20901f7dad384f1fd2b19735bb33720fad67283f4c2b06c4735777","impliedFormat":99},{"version":"695dbe57a9f1686b727ff8112def7376b69da4a9f92a6b4660cfc7adfeb4fd57","impliedFormat":99},{"version":"e30accdbef6f904f20354b6f598d7f2f7ff29094fc5410c33f63b29b4832172a","impliedFormat":1},{"version":"5fd2267cea69c19286f0e90a9ba78c0e19c3782ab2580bfc2f5678c5326fb78a","impliedFormat":1},{"version":"2a628d887712c299dd78731d2e18e5d456ac03fb258b8e39f61b2478b02481ee","impliedFormat":1},{"version":"b1e5f3a55aa219247976db1b0c6af31d07673e8085197aef925f25ca08fe12c4","impliedFormat":1},{"version":"e9f80c5934982b97886eadab6684c073344a588d1758b12fba2d0184e6f450a2","impliedFormat":99},{"version":"c609560ed4b5a840f9515229fdf7522440cfacaf2b6f21e1c3e6b46bfc4431c6","impliedFormat":99},{"version":"43980aaf3d50729108658c84a9325fb3341186024247f2af90a9114206577d06","impliedFormat":99},{"version":"a59b6920d3cd9ac94aa10df1c8f2aa9c76c91d73e4af0e745821424e73bbffc8","impliedFormat":99},{"version":"26de2510ef97324e48304cad246786f786be6b9d067746ba672724fe99eb4a76","impliedFormat":99},{"version":"a822bb869dd9dfdb4b1b5c887b90373d5a1e900191772646b6211541a5ea13b8","impliedFormat":99},{"version":"ba56cf294acda8f40e97bdf8f102617b57c914664476e1f900db307ad0e8c3f2","impliedFormat":99},{"version":"92be2c8229c02b140324d56906af58882ffd87ead115a34380580e9dedea4a18","impliedFormat":99},{"version":"a507cef707a17f4f58b0f106ed3bf5fb044a9cab3f7c24eaeed10e1fdbab6151","impliedFormat":99},{"version":"a14cb49589c589d4e1257bf7bb457548785b619d37e245fe2a6c1b942156584b","impliedFormat":99},{"version":"272f5f51201ffbd79dbb3533503dd3e20d7f8d1040ad42f33068bf9d0b163e7d","impliedFormat":99},{"version":"85a6e5140a3bf1abbba9e6184d732d25648d20007116cbf39bd3baa9312441f2","impliedFormat":99},{"version":"bb9e472d55badebf8969025cc126eb857874252c58795ee5c6e74d686700ed21","impliedFormat":99},{"version":"7be935d17f4f54e3263e1526bae0128ebd6b15835e6c22116a44d8e0ada5a74b","impliedFormat":99},{"version":"b4aece44eaa3781d058e4f0790aa4a4e1d2012a1d62c73ad05e6a5737a7ee293","impliedFormat":99},{"version":"8519f682ce37f2d021cd6072049a7ac2db5fdef449afa3a2a226d346c25d5962","impliedFormat":99},{"version":"a43478ba83037f64bb87ea8471a7e8a407efa910a75540b384593bcce2d38c48","impliedFormat":99},{"version":"9bc917d7e01d56dfae1f76108a8cad4957f961cb51aa23c5d2e69ef3db286e20","impliedFormat":99},{"version":"b0fc879036b6a62cc7cbd27ea444f6fbe57fbef1b1d039b0d566df2117ffb499","impliedFormat":99},{"version":"69b3e0b9435c37d191bce1a4d38c8d18e8add8cb99835eab8f566b95ad9de828","impliedFormat":99},{"version":"3c1183883c83dbb1be210210e1c11a878f87d60f8afc1b3972cc6388c87e7971","impliedFormat":99},{"version":"3c1183883c83dbb1be210210e1c11a878f87d60f8afc1b3972cc6388c87e7971","impliedFormat":99},{"version":"0b4125a4b9bc524a75e880a6f31849624262d8c97cde4a5da1d34256c95f5bfe","impliedFormat":99},{"version":"0c95bbcf76de3e231a4288d81d9e897e10c73da899277da633b44a08eb8eefba","impliedFormat":99},{"version":"d0ca01ffa779f381a0ec9d9efe34ea3cc98b45e4056ab44b5268766d63aab647","impliedFormat":99},{"version":"b5738f6245eee46675619b44f6af0d70f7586be229fb360532a80c44b1b49ff9","impliedFormat":99},{"version":"517171e44831ae1b5c34ba7aa7c7f1dcb21902c31d3f7b2abb51e497a0b99e6f","impliedFormat":99},{"version":"e2e3cde2cec99e82ea98a82c5bd92ed12e4fea8cf402a6e035d5bd2a7cca281a","impliedFormat":99},{"version":"9382e32237e08424b2642d1d9ea4af3a76001cef48888273f769af0c95cf169b","impliedFormat":99},{"version":"45a95142d20916e8510b2d4c42b09aaa3d8ca3d0c3dbd7f915da870ad182380c","impliedFormat":99},{"version":"2131b5fbfbb47e80581e06e8bd11c7bfefcda71f088aa5f1d137d289c20a2222","impliedFormat":99},{"version":"c0c57f6c7ed346d12352f55865e539621bdcad36045d2b9e71be0e168b1192aa","impliedFormat":99},{"version":"11fd3ff2c4379a9f482f0d7c8591fd679d4f8dcab82046db3a1812f8713f2373","impliedFormat":99},{"version":"36f2ab77365fd65ee3261475892dba15c0fe452077a93a19a63aaf2acb62fc98","impliedFormat":99},{"version":"bb9cd6cc3af0b5e3ffa70cb1de85fe6946b3a3f1f10ebed7ed8c772f7ae50466","impliedFormat":99},{"version":"5b3a8b45bba54d7ef198eefa8c61eed06ec95d267108353c1517742be9eecb88","impliedFormat":99},{"version":"8081faa1962486c7e9e5fc2dff88fae24d868c5a585cdb2c38ba1c15fce4deae","impliedFormat":99},{"version":"9f57322db1a5da7c827f95f23fc860c2296730373a87436ad2ee23644c3c86a3","impliedFormat":99},{"version":"1ee555a004b7194196d6d51cf73227cfc1c0f0d043da9a649e5e867a25d1a2fc","impliedFormat":99},{"version":"1d6201fba84d7d56be10c34ef4f816988da4bfd1548902300f3e031a4f482833","impliedFormat":99},{"version":"51e530ae5cf54f398bee91699fa140199f96f2f55b8fa23901815b02c9721fde","impliedFormat":99},{"version":"18cc29fdaa42892eb79f03b9f00bd4619a35bb6dbc1805a7c5f94d9b0e96bf6a","impliedFormat":99},{"version":"b00e3cca08af70a9cad820cfc0c78e477d67b3f72d5f2d6ca967172e3a971f8b","impliedFormat":99},{"version":"9151c2db5ef596dc764093003dc730d6d3d1f75eaf5fa117f6caa2474e98a634","impliedFormat":99},{"version":"827f0158dcf51b4afd0bf7867d30ac9436535fb4422b891a16b88799f9caa6e8","impliedFormat":99},{"version":"a178ef7d260e3ae2d4bb5ef46000ac0ad00c79a454a80b1e03615ae4e410596a","impliedFormat":99},{"version":"6e477dd31a5483cbab13f1f907b29474b33a5140dd4e8672a7ebe00aa27984cf","impliedFormat":99},{"version":"b5873d1c47eff986c60cb5d61878fc2734a8c3e8cc64b7e183fbcdae3676aec8","impliedFormat":99},{"version":"3d1354d536d8ea970fca6ea675d5932b2d5720ac458fa85afcdd80f3b708c763","impliedFormat":99},{"version":"a06839234f46aa66759cd492ce3f716a9f32fc30d9310e1b7618c1f5cc075a62","impliedFormat":99},{"version":"92929866d4c2be4b9510afc8ce088817d8a2f5b58398cc032aa3e587fb700a42","impliedFormat":99},{"version":"6483a445bd97d8cc1545cebe5b4b84e7611c5f2ac65adf4fba8188e1758cb1b1","impliedFormat":99},{"version":"513d0b8895a905e579ed2baebdc817a23dae16e78ecd925400e3142a8096f33e","impliedFormat":99},{"version":"d8ef707d006fdf8e64a9ea3673c4748374cac72d794b632dd6868e7973de3b55","impliedFormat":99},{"version":"780807f8c8cdf68e8d646043b476ab5e2b4fa0f0f87dffe2007db40a770f6d50","signature":"4f16316542ebec0c73702c5e557352876951dfdf2c6606438a834f52161e65d3"},{"version":"1559f7dcafbe461f88574162b5c133c7443a2543088e50842348ccc11049dfaf","signature":"06bbc177243a23ceb55b80f721a5a660a2dae89e715b0c73e097c783fab95014"},{"version":"7688bba0d1cce772a26874fb87ad985fa2a488ab711b789563919194aa33b4da","signature":"0ceb4ef84ef078e260af63215f7878d2086590ac443fe35a3d510f1c8f792bdf"},"2778747ec5f0fa749a66df42831ea70270ab3a17a94f1313e01905b794f92a47",{"version":"4a8f3f92baec87162d727caa562595aa6a14d9c126f62283bd5b17fe594d6a2d","signature":"0ef67e19a4d054ed8e3344bef6d4fd32de744aa050ec30c6bedd4c8a0c626abf"},{"version":"d3bb8603a9ce30438913b8acb12952915acb82bf8bcc2af304f4a858f36887ad","signature":"905c8ddd1e91d1aa7e87b85b84a088cf739678c6b2b87cf6e467fb3291bb9402"},{"version":"c7db7712217e9d79ce5f0993f6664ff5f61bf2b5990c93c8d1a09de51fbcc361","signature":"763a24b877bb2330e819e4dddfa3752624b8f472a594b61544a0b9a603f45e2a"},{"version":"5276ee82ef96770571bd5aae9f4f5cdd474c3d4c1a068f1e1d9ab9cf16529975","impliedFormat":1},{"version":"cdb1d174036ebdb04b5a61461ff523efaeefffd87b093f43fdf20196024b2003","impliedFormat":1},{"version":"23c2c70dd974c3b8b66be4f3d6c9351fd41235d9c038b4d57d334dda8f753819","impliedFormat":1},{"version":"dffa09d0911ebb2639cae47397e011cc195de4a3ad83b53efb2651cfa0e0b75e","impliedFormat":1},{"version":"7d2c1ce36b9370a3af266ca6c663fe62e82671f9cf41337bda0efd837a5e2de9","impliedFormat":1},{"version":"6e45f5dd809aca05301c8e1b9f526096fe89b3369da10fe34f9c037832f103a9","impliedFormat":1},{"version":"0db63cf288cd71a85b06be8065db706797fb7d368a2315bd34967070c880facc","impliedFormat":1},{"version":"755ee0128a813468af08c5e673655a068813c92f4179978fd37ac3df1688c2f8","impliedFormat":1},{"version":"f183da4c889c90d5060aacc1c247c6cd68cc0024b9891402bb1c07a492d18018","impliedFormat":1},{"version":"da1c8718353e2981fa5981328a2d5cf6bc70da59c51967924d032a06177bce50","impliedFormat":1},{"version":"cba87731af3b8e51151ab6b3ba2d9604739649cf132885dff49836d5369ae387","impliedFormat":1},{"version":"3965bb091883ba173f7742c16ec8efe81207d75774d3a809385edce6841adca0","impliedFormat":1},{"version":"108fd0cab464e528dfa511d982368df2c9d9964e1e66f8921ef40accce9dfcf7","impliedFormat":1},{"version":"8d48c98fca3f013fd2872810d7168a9c405c4037962637aaa0a094571e731757","impliedFormat":1},{"version":"9898a7c6ed78c9656079244ea2318282f42ffd1cb5d4aa5753decaa7f3eaafa2","impliedFormat":1},{"version":"9b84cea77bbf5cac5c4714a341f2233f2c81f9f4473c26b0c11c159a8598abb9","signature":"8e4ef7f11e844396ec1dab547d5236a02a5e49fbb1ec65016537ff5676df17be"},{"version":"de5c24590448a0399aa7cf3057217387b277f4664c602028531ed60758394287","signature":"be1d725124dee573983a99a43e377dbbd1818698ab81d1ac83bf63b92b4e3d46"},{"version":"95ccade4cb1378910811207172141620038bee6a72e0aac8703203a4fa9ee2b1","signature":"eadfbe13ba9a2b836bc92ac706dd8818ded7bedfb6dda133cb00a6bf31fac519"},{"version":"28b3666039f660adb329975264b4e2ceeffa0dd061155e72da33d773f0e57c30","signature":"ea2db494593e46f26782a2d3331a279039a91f0cf48aa8a26b1dbedf4a7f5e4c"},{"version":"4f5239569ea92e174986b8cc746afb6d3bd469d9f87d28119997c7ed207c36ed","signature":"7cf2986b54b4761dd3255ee59a0d0f98c1af8a8d563ae217afeac4195e0dfaf7"},{"version":"b4f89206c8e318e5e65294ae7925a52a5bc13508809c5c699d7ebfa14e0509eb","affectsGlobalScope":true,"impliedFormat":1},{"version":"d51500cee65d776a8591b72c1019b0dada25d6f7ea39685130ccedad2e8b1eff","impliedFormat":1},{"version":"e733b8a7d2ecce20916d95d75a0c7cdfff7e8371879006902d77969da1550d65","impliedFormat":1},{"version":"d9d5884c0b7a87c6b0b319474eac7987f915f7460a04012d54689c14c800d69c","impliedFormat":1},{"version":"42739f43f21108aaa8b2e9d1246c537c88fc193694d5c3660b49ab5ed87bec60","impliedFormat":1},{"version":"8c4c212cbe640024a5076e006d5ed48c6856bf3a79880c52d0fe453495b84e7d","impliedFormat":1},{"version":"8dbd432facc1bfd211d58bbbf86a405dd55cdf04d6425037171282ae5e1bd5ae","impliedFormat":1},{"version":"bd0ae662720de3f141b078c64de498113fb13faec0c1cbec62f1630f7b8954a3","impliedFormat":1},{"version":"517fee0f998ca443a8eedaed7ad143753cd7ed6c9fc97a62200c09b21ea661d7","impliedFormat":1},{"version":"e94e5a0936bba407a0d0b7846ff8a7960667f09040b575b5035bc30298510781","impliedFormat":1},{"version":"f6a3229a9d452117bfc85b50e955b836c8c91b1244dd8d3413c2824333022982","impliedFormat":1},{"version":"f7a32e6a301921e58c28b8cb944134cd447d4db8b5b85d0e614abc90a333080c","impliedFormat":1},{"version":"28732171a9e5a176e9d8b9bb417b32dc885591bc2642232389a44167bc5ec581","impliedFormat":1},{"version":"90ebe8ddee75b7e87baf030d45d49e13a91dea47fa4cd8494ac85e5ea35779c8","impliedFormat":1},{"version":"6ec1d690b2213c008b55d31778e6c4f13141487fe26749ee6a0b4c2b6f84f9c9","impliedFormat":1},{"version":"43ae0b1b0a836f113aa973b1a4d114e2867fd320125e43a80805d9a80ab07c4b","impliedFormat":1},{"version":"1b6d1aeb6a58db9a9702623d7edaa31eda44cb33fe66f349f6156b20db8b6211","impliedFormat":1},{"version":"5ee542acb0e360c539bcf027de4389536fdaae8653e47b33eb0445ba85bf223a","impliedFormat":1},{"version":"8a0a53613cfa756a769e4514632acac0e17d80631af21a888daa46ac01ccdd1d","impliedFormat":1},{"version":"e7f9e4cf51627c95fdddff062c58c6b1c4e22d1868acbf3e7e663ee95e3790b8","impliedFormat":1},{"version":"449d082b398ad2a53c5def35397b752d61c968a2acacffb935d564b5ff3aa19c","impliedFormat":1},{"version":"1a3aa0fb5f9a2dc05a33faa6246f85ecc52c8af7a5257d8639e724a12ebc92bf","impliedFormat":1},{"version":"6480e9b0877e389c96e3b89c43fb2e4d84bb6ae8cea22f8ea2bf30ac4a4c4136","impliedFormat":1},{"version":"9cd1a75410c01f48f43befd40b47a7d2d42565b5593d5cf02b7472b04a1d98c8","impliedFormat":1},{"version":"d0144e7240c7f26030468a13211194d192316099ebbcee7782c6005cc393c734","impliedFormat":1},{"version":"095a402135de9fbfda29ba7c984bf54b9e65757396b4165706d898e9baa83ed5","impliedFormat":99},{"version":"0b6471168629b8a0cbac9f8f67bbbba83a1d64cf1424cd7d299439b3af88129a","impliedFormat":99},{"version":"3e0fa3b04086663fd406499ea37f0714b0d7cbc296eb81e244f2bf0ba4938bb2","impliedFormat":99},{"version":"3d11abe325e68a5b76d9f53ecc0b4ea29685ccbd8690b279f2177e0750d87f8c","impliedFormat":99},{"version":"f1952d24cb1344241341230924197977764249edcde80605e96454f073ebb35a","impliedFormat":99},{"version":"3b5b37b56d81802168c5b8df2f1d4a7ee018d67e7463f221d49b6ea20af00060","impliedFormat":99},{"version":"f3a6db8faeb959400a4d0e1100b9d5c54eb494800e6dc9a2452bb2e00a27397c","impliedFormat":99},{"version":"d278699a1c7e06a195ecc065c4965d1bbfb5bc2d67176e63bebf58b273158023","impliedFormat":99},{"version":"261ffd2f7502d9387324715c7dcb9f3a30c8d044b6dc3abc7ff80737c366476c","impliedFormat":99},{"version":"28729ff7b2ea98a9ba6ca4490c5540be744a4d73b4199ff6094cb65c9db33607","impliedFormat":99},{"version":"6ac889647435812fb7ced7035daf90c1f307710056e4b496a3fd5cb97c87daed","impliedFormat":99},{"version":"29f60d17027d6bc8891797f6ed95ac84ee42313e6b03ddb49beff6f22f49f8c6","impliedFormat":99},{"version":"f71579228be8825267577e970c8f0ee2869cebae0bb7603b00644fec924c6717","impliedFormat":99},{"version":"e50f096cb424b63343ad5814622623f15cf3830f41710376bebb3c7f71554713","impliedFormat":99},{"version":"69ebae4354b59ff1ba38419d6033e22d0db6ffe6c1d562e78914f88f06ec517f","impliedFormat":99},{"version":"45f0aee62dc187cbde99b10987e1f8649a30bba8bf9c95957e37d1551d0626da","impliedFormat":99},{"version":"919b048385b82efca27e5adec2f61f17a2b219582f2deb8a13b4648c7c8fafbf","impliedFormat":99},{"version":"47747eabb3c64620a12f707bf30c7f7a211e25754a2da1f98267068f49bd0947","impliedFormat":99},{"version":"2dc1bcd6a132924a89f965b60edd5b5333aaa7eb28ba5af44a0a0a328756e9ad","impliedFormat":1},{"version":"ad117b97b2eb65daeeabf0adb13573a8f1d12d5ce21c312eb7eb588106b92560","impliedFormat":1},{"version":"683f7d52795b5e2c0a269c4a202f212d147eee850b6d74050af619cea7638605","impliedFormat":1},{"version":"bf338c88f9e91b1700029f806a2d8bb447f19d3e39fa57dbba16ce8bf43902c2","impliedFormat":1},{"version":"d3c9c7df6fe4c7905f73578af2542e2f303da2b0565abb10ccf8a75626da1bb5","impliedFormat":1},{"version":"a16c041923053317f99708de244e50f0c563de0ee22313739810b67cec8af89a","impliedFormat":1},{"version":"b64880a77efc0fba08ee595d277a52e7abbdef2dde51a163376f03d6d3a67c7a","impliedFormat":1},{"version":"817d7ba9b41a1f3f7d15e8c1067bc32ce0044aab0ba05e2794294ed25959cdf7","impliedFormat":1},{"version":"6e6d52eece8b335d10a436ca59f91cbf0727f9f2ac0521a0b0ffc32da2006948","impliedFormat":1},{"version":"98e70d3105aa56ac3e2a34a78f10c6d352ff9e3148b1bc2bb11c1787f0176d26","impliedFormat":1},{"version":"144ffc9e0632f167247b8ebc6c12b690555b27930cb2d92edceea7df51e54bbe","impliedFormat":1},{"version":"cb6b2bd587f4d8b0299840be7cedf422fb895d3c7f6cbd8c18c041518ba82fee","impliedFormat":1},{"version":"849b51d422f1a846684da755840ffe68f65701b7b7703ea9622847df65dfb2cb","impliedFormat":1},{"version":"3b17eebfd6fea2320c3d3ab55e26bee41e6745fe51432da7901e898249a8c186","impliedFormat":1},{"version":"5d9c054ecd5fad83e0ec5e117196acdcd4b1cc5b8d28f5df752a416c27052aa2","impliedFormat":1},{"version":"949c8eb79434b05b6d1c10d2010216fbd6c920ee376d08627f717d24b6572454","impliedFormat":1},{"version":"25495d26470692e2591e386c1dbffe4aa0b2d8c00af6ac9c8c69657818262dd5","impliedFormat":1},{"version":"abee0197420ed0849c7adbff50fc13f54ccb52f9a8c906e298c28321bf736cd9","impliedFormat":1},{"version":"3af7286265437a7488193d0ab0b56a6e20e1a5e08831a6c3fe0880212c2c6c75","impliedFormat":1},{"version":"d7eadcb936edf325912a70d1c4874c29b92463ba1eecdb302858763db6a68692","impliedFormat":1},{"version":"04fe6e4f5bd35c234cd04ea88ada66b718aec4b3edf611147b0ec9ea216b3cd7","impliedFormat":1},{"version":"7aa826d09dcfa85af6b2cfeeb6a7f340d417968632695fa8eacf4186fb71e8ac","impliedFormat":1},{"version":"ebbf2bf006f21fc203f1a555ff0fdcd8542d1546d7cab60aa835ff5902db0d2d","impliedFormat":1},{"version":"12aaf4e3c85225c710acd6a9f41532bf8e06bf180e54c1bedc60fa9b9c1a7d23","impliedFormat":1},{"version":"7814f653054116409bc9a36968b77c878c2013ef8d8873328e8f6fcd3348d8d9","impliedFormat":1},{"version":"ff4ade9606d1b3fe1a10bdf6ab944e1bb1d5ac86035228ddd3ecb5fbe51d4d47","impliedFormat":99},{"version":"608ffc65e122c3eeeff832a9007ecc00fe71bf1b03a3069a44e8c565ee8af368","impliedFormat":99},{"version":"40b54b241bc79a986a5ac364f7f11c60af8c68ac8d45c80501ed31af7e587a74","impliedFormat":1},{"version":"0d1a503605c35a53f49ff2b6506704b289bc33d9001d2244044c91fc82315c8a","impliedFormat":1},{"version":"96d1d70759af66ea4404f7c18130ef478e5052de8863e2bf4467cfbc2fc7176a","impliedFormat":1},{"version":"d0476ddaacf1b8b9b18aa7cdb54eb8bc7edb69165a455803e2065fc28a321960","impliedFormat":1},{"version":"9332e2b6255fd361167671093522351ad5e2d0e3a78d9bf8f0959d779f6d3246","impliedFormat":1},{"version":"5be2e2b5ca39c4fc74b0273674a3e7705088513872fa3de1e4f75357a507a988","impliedFormat":1},{"version":"fc8bef71b44a15c1c6afe97e2ce74c7beb10d0a3c45d19dca5b9d53cf81cc744","impliedFormat":1},{"version":"41dd7695c5e11ca31e40bb8d9a2edc9c2b3e262d1007fc7471ecb91516874d98","impliedFormat":1},{"version":"262efb4650083ac514f3119534d502211d0270140057698e7d4978caaf4b6f97","impliedFormat":1},{"version":"b5e98f1f4e64ace252ae743df592ff0187aac817efaf58cd97c63e243fe15951","impliedFormat":1},{"version":"151f53de4563905919248ae634d857276a8491e62416b6f2cccbfebfe6794a72","impliedFormat":1},{"version":"83e392127f71627fce9a8e0ce30fd22c043db537c93d8731101b138c38fbea04","signature":"b18f85c7c3b4572e27d008df363a8a478673a34b2643af924408500defd13eff"},{"version":"59d65621a16b1bff32e7a8b07fc677b0cceab8d73c5ebbc0f23a405d5fe63686","signature":"afb3c335573313cccc5129cf7d65a34280b70ab837ca01adf5749f147d36a2b0"},"b2ef51f383a2363e3d66d715c0f9bb84249becf53629f26486d418c8cb6b5aa3",{"version":"752f6b591f1efbb939af28c2e5c33ed607dd554df8711c0a469fb9dc0b59c5f5","signature":"2bc07b301241975bcbac4d5d79029c4ef22487fcba1b2e17fd5291c9ff75f899"},{"version":"a6e0b5559a7189298206415308a4a1f1bd13b5f5ed91da861cee12cab2f641f4","signature":"b85afdfada5cd23d82b75470d0a07c77e28b3d12f5c3f85a560e0ab55d49bbfa"},{"version":"1b4dda36948afd6a509a29f86633a7a538a79211aae9e3e09fe24d3d6dc65a97","signature":"67ba6fe95c932da75b57cffc54d7a789939fc278feb0357272efe2ff87b999e2"},{"version":"1036b4ff3d86ef2764256afd871b34a8546244586f00a93646aed983167dcd22","signature":"73c54888d278429c71c1a3fb2cc4a04e6329ffdd314ad247fda1bc568fad32e4"},{"version":"181dab36aef859f6e4aa54e1b0e755866866228cbbe5455522779dcc99648dc4","signature":"328225c19eb7e55d60128f4732ecb4393caf9c2e9362d3b2f5b73daa0cd4b14f"},{"version":"b2e1f4d7e311fcbd8998f5a631ea9c77601967f8976c4ca626a1b05ebf3efaa7","signature":"d9a9d70a217deda30251a4fd497ef29604c7169134c6358b7f72f749c50129fc"},{"version":"31bcdb1016481b1fff0668d003946e34ce93fd86e80777c56026d7d1987305c0","signature":"0ddbcfeefd42e0db9bfa750c4088677fc903d4e246f7ec9d517a0abc1c4f302c"},{"version":"ca28e21dec32859f280a5efcc5392c626582d4017c0b36a8265c9ff581b3617c","signature":"31cbd413f24383fe9ba24aea48e827a2b6299680c89b4775912883b30a1c615f"},{"version":"246d7397668a7ddf2858967263ed8aeaee0e7ba4f0ec063d639aeffbab6ed81a","signature":"be201d5e21bafa57bfe609e7ba8268e25415e086a3171120b57515ced376cc83"},{"version":"d1726a0ddc24aea9e851a8ce56684a29f58aaa37a41d7f3840cbdba69043db99","signature":"ac529d5c8704e7b6039d0f13282335ae6c9073a1d58c9f80ce3476ee07da2f80"},{"version":"3eb40afdc378b50a96a2ae67116adbd1c163600481f7d182d46e5a3bf3a8cc25","signature":"bf164b6233447badd8a6dcd799adeeb613f85e0b21bffea907d4cd12b2787613"},{"version":"3c3c17f0acbd71abbd94c109027b0c0274a6bc9aee0fabe5b9d48463ea69d87b","signature":"cc20f52fd4785722688412244fc078f326b981d25a0dc5c88408ffe4ce821a2a"},{"version":"296273d01ad5a060d70f600fa110abc2545b9bc707fcdbeeecc85c4e9cda7509","signature":"6495a8c6a32e2cdbd564621ea29851da9282bf492488d1a315e573265ee1159d"},{"version":"1ff3822feead679faad5ae04acc6b7a08df0c44e3077e45566b2c4df19df28c3","signature":"5a0a01691ec73195f56d4106b854cd9dc0c77e5a8b062d6a80dcb51969dd2761"},{"version":"3a02674c3a48813e03c2fd5ae7fd6307fb6c5bd772065a5cf7ce56633d284a35","signature":"36f3bc973c0536dbbc4836bba1b4b26a1aef52391bb2ce206e05d9b0a6f83bec"},{"version":"e3ee5daefb9a226bf3097abcf3b628db556ccebd9641a7ee0609547d98c851db","signature":"36f3bc973c0536dbbc4836bba1b4b26a1aef52391bb2ce206e05d9b0a6f83bec"},{"version":"203ac3e8a0db9e5eb975c9cbbe5905c7fcc0b1907c4c1e13ae1eb2899ab00055","signature":"36f3bc973c0536dbbc4836bba1b4b26a1aef52391bb2ce206e05d9b0a6f83bec"},{"version":"48d88d2c46c6da424c84808ff7b0df53b716cfee2b8cdead2f491602cfa76796","signature":"93c35385913c1c8762d04f6fcde1b39978173061cf194cf37d4eaa4d86ff9447"},{"version":"f2391323b20c3ff6cdc785f9d7e6ec7d515843857f4f2edf4470f4899b91cc5e","signature":"de67cbd5a7c02252a3cd23f87c49b9539aca2d737f26d1a5140f23cb0f5a71d6"},{"version":"f973ea7a19526aa0096d2799105e6d65030be2dc9baf5497c67a1e8355530f50","signature":"9327f268ce4afe27d071f199c21275c2098e5d190981ce3639107e97beb526e6"},{"version":"e4890347e9bcae005176bdde5d04078511f7f0102f856b1ae9d6467622895fca","signature":"78412e9f82f609e0f9b50cfc92378eb42d10aadfe9c29c9f011d74de21e1a2a3"},{"version":"b59e268333810a6ed4d17e2b490ece89d2db6cef01236b84526bb8248be2aac9","signature":"d05b78897e269664ac949de0b4d9d8d514b7084679a26bfb340d04f24036631a"},{"version":"a2fd6350ef2a8ab815957ccdeaa328e0ca6bffbd2b82c6c1fa1b319b0b883a2c","signature":"94fcd5e1694e5bc5e9955010905fa7100a2baa06268b4c13487e1d669df224de"},{"version":"5276ee82ef96770571bd5aae9f4f5cdd474c3d4c1a068f1e1d9ab9cf16529975","impliedFormat":1},{"version":"cdb1d174036ebdb04b5a61461ff523efaeefffd87b093f43fdf20196024b2003","impliedFormat":1},{"version":"23c2c70dd974c3b8b66be4f3d6c9351fd41235d9c038b4d57d334dda8f753819","impliedFormat":1},{"version":"dffa09d0911ebb2639cae47397e011cc195de4a3ad83b53efb2651cfa0e0b75e","impliedFormat":1},{"version":"26168183003371ceac063f0cdf62be889d0515a193444a99b176094565dabb0a","impliedFormat":1},{"version":"7fc99221160c51281d2b9095552be2b24b600b3b6fe305cfd068bf501f623ef2","impliedFormat":1},{"version":"0db63cf288cd71a85b06be8065db706797fb7d368a2315bd34967070c880facc","impliedFormat":1},{"version":"755ee0128a813468af08c5e673655a068813c92f4179978fd37ac3df1688c2f8","impliedFormat":1},{"version":"f183da4c889c90d5060aacc1c247c6cd68cc0024b9891402bb1c07a492d18018","impliedFormat":1},{"version":"da1c8718353e2981fa5981328a2d5cf6bc70da59c51967924d032a06177bce50","impliedFormat":1},{"version":"747f48fa4633d85211b7e6afefcbba37b7adf816b171a569105db23ce6009286","impliedFormat":1},{"version":"3965bb091883ba173f7742c16ec8efe81207d75774d3a809385edce6841adca0","impliedFormat":1},{"version":"c1eb69b3ec8f1080980c25c8244c4ba093af729f4dac451758e69026b20c50a7","impliedFormat":1},{"version":"f67870591872110fd6a97ec0d933972f21ccf433bfb9d8ed1f044740958c4e43","impliedFormat":1},{"version":"a849f7a91ecba56e6ecacc20a383a825aa6cf5b2842e75a3fa9348f06d71295e","signature":"123038618600a62541709eeab9660a35f5d74ef00a05c6a97e85f561f6eea0a2"},{"version":"858794e17e92e99c7257ce08c98ad806be9123f7c1fea852f2f899a0508aece7","signature":"5e830f1bd5b1920dbf7cb2524fa1ddc2a0bd7a309f4c253f6d1f1a7ea41cfb52"},{"version":"a28e6fadb0b6e7a95cfcd29366f2b72a8e3193270d3f2b673e1876edf0159c7b","impliedFormat":99},{"version":"5494ffbcdd6e45046d78e3001b4da0b472dcaf9e6681d1bf84e99c0b206a9861","signature":"286abc56d85f06a05eec8a1529f862e68c99845d1fc209c1db82949361a42382"},{"version":"837c40e7e259b78104bdda5a8fd589b19a753fb7f77c8c316baad18bce444fba","signature":"d017418eeb84dad9542caf56a02bbc676cdd1efc28b95eefd9109cf79386f2c7"},{"version":"9891b4e49d435c7ac14fb3cc769e97077bbd946100c952df08eda117c3b5b68d","impliedFormat":99},{"version":"9be0dc6f4c5ebff5d838dc0d059f25e5a6ab1d224d5adc7ef46887ce8549e897","impliedFormat":99},{"version":"32aa20fd978847e617304582657723f0dcd1809de9b087ed0ad5b7090b1a47c1","impliedFormat":99},{"version":"1f37db92ea78f4d197a201f80a3c52ce6e2b759b19d3a1e9de5aab0c9026fe3f","impliedFormat":99},{"version":"c07898a85c15b3b636506443e88fe6d85bbd568c0bb504a9ae5cb371d58f6319","impliedFormat":99},{"version":"2d45f7ff55036e74513af142af1f414924ad337cc00e612bb37bb55473c70b30","impliedFormat":99},{"version":"3a6b10911970b0588c5a287642e4c6be91c16b96407a499c6dc81a96daf1085a","impliedFormat":99},{"version":"795d467a57e3a7c4aa3d645fa2edae9a2d0d44dde435bd1b222ab533da6fce44","impliedFormat":99},{"version":"bfc5aa7977557874fcbe1e96f7a06e46b3b568b955c82b74a85cc8f6c62060a5","impliedFormat":99},{"version":"f20bb3ae0de20cd6a4b73155cb506bae39e904b7e5ea4f618f5bda7b3ae474fc","impliedFormat":99},{"version":"44c5d9f47e85552ea141ddc1b0af65903297624f0ff2227372d5ce31ff0380c6","impliedFormat":99},{"version":"8790b28796d1f491f3268564d782ebe2879829ead0c10d9aab60c2e9d3588d6f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"c0a4aac782cdc312e796608b467bd8fe8c8202b0fdbce29eb83d1f439f2a09cc","impliedFormat":1},{"version":"c7a397d655099caf70ef4b64ba4fb3c672d810d7c1e46fda7f1ae500131ec248","impliedFormat":1},{"version":"cbe4de475b5492a3fc5443dc2c75c08d054f83d459c06d4e1a82722223fd0fcd","impliedFormat":1},{"version":"45ea1eb14968f6bc1c7a77cffc1a5f762a7069668732cd2bd5cf143d96a10d88","signature":"e5e1c6216d62f457ef69e1ed96429f8efd86a38b212ba4a5eb98e1e73d732855"},{"version":"a896cee6bbf43009c05e9ee4b0cfb1147ae49a4ffc2d814c6d7465806d76fe72","impliedFormat":99},{"version":"6bd987ccf12886137d96b81e48f65a7a6fa940085753c4e212c91f51555f13e5","impliedFormat":1},{"version":"a9b4d5ebf62da6decff3d9ba91a354f1f84e4b672160bfe672219d719a6c9735","signature":"f1191ab09b35a7f58e249ea6e95f8ea3da01f49e19d545ffcb3d042f8719dbfa"},{"version":"e6be08931c776916434a0240aea01e097d7c8ab0278ca22c535f9564d99755c7","signature":"3c8a0ea4bd3239f6eb1e8156e4d938e462caf35b41506d66e43e7c8c870de0aa"},{"version":"3bf7074d9fe7a42890f98df09734c059560bee1acd58eeeb45ef749c6590ea72","signature":"16a788b1980c11f82d60a66f8b463cb929e8f84ee1caee0bde6909965f043c46"},{"version":"2f9ac707504adc40be90c966bf6941ca32749c9cff11269ceb74ebce549998fc","signature":"3666c9442e889778feaafa6e18daf18c2cf7008d6f74bf98355613389cf73ccb"},{"version":"760b600c4664aa4cbff56d74e9b168e77d62eb11637f9df97ed4898e6fd0bc7d","signature":"16a788b1980c11f82d60a66f8b463cb929e8f84ee1caee0bde6909965f043c46"},{"version":"2ecea95b433caa7cb7693c720f23e62f076b13c5e46ba8c6bc5ac4a597c2c09b","signature":"eb6ea5c92365b1a69c6326c48cf2cb2d06f922bde4efaaf36053d8d6d2516ce9"},{"version":"4b248dbaf94ed07ca827344205498cd6a199486ca4ed481c6823ce4a2a58f101","signature":"99bda55390689990f1929654a21c7ae72b3d5a745c01d4d07d56b9de620e3bea"},{"version":"204f71fd5637e5eaf2acabf1ba5a674077eb97e5920f67ddb43bab804b3bfdb5","signature":"c6aea2acaed7df5ee9a9e31e8a4d055f9d409d1c730571833a4c580f66befcfb"},{"version":"1c190c54c58a41ed84b31f88cf7737ffddb2449fa474b154dcf5fb5684667c0c","signature":"6aa83915c053dd02210cc975820738ad28468c46ae300915cab3d5d99c44b835"},{"version":"113d200d8709d86af1e1c17057bc2a59faa494d31fe3aba5d3e472a11196cd66","signature":"c3608f8ed7d19e09dc67a10b45509768befe050838343d5ae39b60f97edf679f"},{"version":"e5179def8be76cf5e1e4045132bb5bc23bd5bbca339ce159fdcb6a6eced7acf9","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"cfc919572f1ed08c7f16b22096d3dead757f805e00e1eab0f8d2f2e6a454aa76","signature":"adb85e9733a81adb297d425caed0eea00d13a000fa634b14594fef8edd9ec024"},{"version":"93fa6d6206af8ef1708c47eacc1e3315561f7df227c30dcdf22613de15d8dcb8","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"fdb2f04ac4847fba15176be0465a64b67ae3d16140a62d472516f0024fe576b4","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"5e074078d297d407f935b084436a66161fe67af6150e64356457a64830a48926","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"fb78e606dc1da5d66f1d47782c50f29f5f1fb73938572cdc5df442ee3528fb1c","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"de98eeddf3ed100c9fc5146dbb11932f0234b74b1c8dae05f64dcb766bd2b1b8","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"648e905763c70a88cdeb815bd4a162250027c2bbd4c17e5f831f0f12c273798e","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"0f3e97babf73961349e942e4c41f7419163afe93e043ab7cd304cbd492e0f39a","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"ef5f13cf96aeddd3100b42f791205e602f551c2106eadbab7a72fc8fec1ee543","signature":"246abdc7457c79ba330703be8a21c32783cc2f8412e16790e607d78116368dd5"},{"version":"d1ce233383060afc1db856828610052df70105dff680d55eea0c9a7f82d39bc5","signature":"648d858af8388a3331b43dafcdeecc53d42fd1e332cfef77e989c10d1f3c4ee0"},{"version":"36953fe9fee3721c62cfafe0b87327d606205da9d2f2a3e41abdc9c3ddba7d54","signature":"7a81656b588a584936c64722c6f279d1ab98178f8ab1ebc2537a070053c32f85"},{"version":"df884a193d2e819aa76f4e57a6c0ef72612663d1e9b37a1de0027c8c11fbf216","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"3d4cef432d7e96fa18c66c90a6161fc79e3982ac09c6dccb5a1c237b81320591","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"f34d529d782257ccc87df267226d63b6ebfc985cd5af510a9d4ee3ae8bd14cca","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"05086b2bdd1ee47459168c8f63a2daa5742ce31567dad416da219f936b4bdfeb","signature":"b745a48386544d018b478c58273869028973eea6f481c8f08040a6d9b670445c"},{"version":"8f72bdd08e7a4c15c7cb3baa6ad7972bb0daef797dc3dda0f2d2122a93a5c786","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"908a50708098d91ea15a6ad201583246a6ae804572fab4d6096a8ce2bd84801d","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"f6b4a321f86474cb40c946d6de4cd8c861e983fc266d6a9edad68ffc526da908","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"35823beef0e23c5e19c2398d9f602d8fe2a3156e4163e62acfdf7d2d0950e48f","signature":"62e73377511c1daa3d75a644531745ec773c5c9573adc465458788978b863c1f"},{"version":"e2a2b24f612af140c8d6b59baa23af4df49a95d319d046086bb1e24d1deffa32","signature":"e719f7e10acba456eee9f963078b98be2e4d2d5a331e6835d45bb826d2a0ff07"},{"version":"b2634ebe505bd7463a3e751f6a27e37074bddaf44fef83514faccb664ac76a13","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"3463099173871b687dd02764d17d631e92cc63e7cbddd3e8eaa21fd927988901","signature":"72024a6c9c8b87e090b9d9a1a6e2322235a7de726859a5ce8401c5069a87465b"},{"version":"f798a2b88c55e96dab7d93ca4597fd3a7a6963c5f38114bfdddac05ee084264c","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"c82b628a7676ad99c15ae7b32bb6e70f8effc59ff56ea5044b7d573c280cf5ce","signature":"77ea860fed466f552a479dd8e9a4914c75eb3d3eaba2e59903d01fe5c7a4871f"},{"version":"664fd6bf7cbf4e641f172c6877b41dbc500e606ae01f3917300264ed5f0f55ce","signature":"72024a6c9c8b87e090b9d9a1a6e2322235a7de726859a5ce8401c5069a87465b"},{"version":"837678e6e5a58f269855ec23e6a2dc16ad61daa89be3793696a550e4ff62739a","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"a0ead136f7e2ff0de9c31f2bee24dc00988f7789f32a5a648bd365656a9da740","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"c4bf9ae7d77fbc75fbd333d92e8b5927b33063b64d8a526ee3fae74cd1cc6482","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"cda56df36d3c1eed4aa985131088cc86268e77fa310c8c939171c2c841e4fbec","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"44a6f397bc1c98e8b94b8ebe54516bfbc940f8c78ba44d9fa8491e4e64211a4d","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"433a718101638b14bd7d628d853940bf49c9e73fd649f6bed45d38b08c1a33d8","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"cb016c547dad6d346d42eec7bccdf8180233466c0b6a3d1b802a6fa14c69533c","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"7b433aaf72fe38be0c239f9090c8e211352b376ce169567fd935ff31395f9f49","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"bf9daf2670c8b49fe9e7435d48b1a74215cdfb8a01e2c0d6bbe46d83abf9f31c","signature":"8f97c6882f0e15e9e14e3804ad71e97b55513f84ed8128c972141c4753032515"},{"version":"69b15103a5bd95b62c4f7c4dc23e1b516766a206f38c8a132bbb70e07c79439b","signature":"5cc986d834f48532220bbe48b3b481b811c0befe8bbb13e3b472751c01ca16d7"},{"version":"ec685be78af113fc87ec6998f7ea72d31b6250440bc1763c6279f8b33ff40ae6","signature":"cc20f52fd4785722688412244fc078f326b981d25a0dc5c88408ffe4ce821a2a"},{"version":"16401c0faac33cfc2b628a1cbcc1664559e1c4bb3a085a8538142bb28f8f0e7e","signature":"999025c61786b8a7131d5fdc6f5d1084a5b2c32e6a56b45cb9f5a1a91525821b"},{"version":"e8da0541d9cc6e6dbf7b8be36c653a109c40310de8d3054e56f55a1609bb119f","signature":"bde0e60f6853caa976fdd8ff4f5ac0e12708ee1e053f978a1f773da1810a952c"},{"version":"f8c32fd18a406cd29fa0ccf06d887ed0c19d5162ef2a3d3129c1dab3ef553ced","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"abab797abf6b9380a2083d4b164baa04570735d7faf51b5164064cd6e93694f3","signature":"57fbd1e904cc52393bd2c01e95fe6e8feb7094c17652c1afd0773f66e47974ef"},{"version":"d72b48d15417b240c392315dcf497a2beca0c1fdc09d155a3727659a6916fadb","signature":"23164e2a6cf12e9352cd4ff965e2e8b90303c88fce5e481b084ad9925ff7aa2e"},{"version":"e29318092a9d32cd2b0164102cb746052331b6d7f855f457ca11c0385339b11e","signature":"c860db1ca2adb2b534449887235ff11dd99f6d96310b14ce7c2c783aa952c6c7"},{"version":"25ebca34c1077f3a29919061e3ac807c17c0fdddc9050b1b8d2bde585c827866","signature":"649672eb2fd0c222897718632f63d8e147c04f17d2bf2ab946f03780aa6a42a7"},{"version":"519ffd06ea1dac7802692b811edec2a93b18700f7c940ce65de3bb2235702a1d","signature":"c762ba51cc0654ba2e0ef3b4888d705b776eda3754df83a224aaf338cfbbf154"},{"version":"2ee58ec4f3f11c32edd3499867198be5f4ad7022f8480369067687547f7ef75b","signature":"a9f21db081a63636acac58c38771c7b5ec230524eda57cbe0ec9a676d4fc4a20"},{"version":"e8da0541d9cc6e6dbf7b8be36c653a109c40310de8d3054e56f55a1609bb119f","signature":"3e2c4249f48f721fe1889f66ea1f1a713715cb2756db4e1963f16a9b03cb7559"},{"version":"af123751fef26c39cb168362d699b48c419c8c8ad7ec5503c90f6bbce554b467","signature":"237d645cc5dee7c6604c86dc4f6b41b0129d9ef8d097102be2203681e1d3883b"},{"version":"ed36faa2344c5c40ad5794972657f29d487b68fe0662145a5093a3cd018e15b3","signature":"9acd65d19f983b23aa6b660cf01f5ad3641702941efd356b74b4f945e824c15c"},{"version":"ac9b3c53465714855f732448dc69f0dc56fb108dbe8c2e3e92c723e2a78db039","signature":"4f2b19841ce35b47477f08400e0d4969aca8c4f966a0bab3b6ae97d3d90a333d"},{"version":"690a5a024c85d7af9c4bc5167cba52f0ec38cebfa6b0f02a4231fe19713c353a","signature":"fad16cea5b71686272ec5af39f801f8f74acc2d54177afed6a9b8520d83a3d39"},{"version":"d7804b8341e5a42c044455c766b13098e3e3e03ae11b2ad9b3f3806bcbab3b29","signature":"f5b9ed448c08a0146b530fa29beeb19d77c43c97a868bd967cc27220c230aec4"},{"version":"3b6704a38e51fc05dbe9ea78361e0d31bffbe4a602edf08563593b75556f8040","signature":"6fd3513ec99ec1dafc8182018390cee48c18389a964f6a601b29c808581c76cc"},{"version":"0a714f89f0a6189d342941717d0ff3a0fb57dcab179216fd59f5017c00cbe46e","signature":"a8dd8cf09660c6e6734dde4d379bb97f6c4252f41b4de1090f081031bf77a3cf"},{"version":"690a5a024c85d7af9c4bc5167cba52f0ec38cebfa6b0f02a4231fe19713c353a","signature":"e9c0ceea90fabffa3a39929fc71440a51118f5ce6a0fd321f61c60e2f7b57e0e"},{"version":"373a74a89570f59c6a418b5e7f31ba11ad1ff0546e36c1bce4cc14bd0c45ee3f","signature":"87b32b3608f4ce02d7131b8d18ac99f3cce429b1ff01818ed0a36a6098ce4c6e"},{"version":"eba3e941058c78550eb515df949f97ea94df504d0f5665783994605e4bc59c96","signature":"6a15015acd7ce2322799675a317b5975d4df6bafe575c154e223c77bed3bae05"},{"version":"1d1ff9197037131b99ffc2c4c5dbbaf1868985b02c5f97196723663c9042ecd1","signature":"14a246541298979d6a1bd283ca52a82edbc7c2ff62612b9e95b24d0695997fa7"},{"version":"690a5a024c85d7af9c4bc5167cba52f0ec38cebfa6b0f02a4231fe19713c353a","signature":"45fff50bbd279e787194a942f2a709f0ce3139f7c82f45b1241ce372079dfdba"},{"version":"74dd0f04dc885d4d6e8d93023de5585ff3f3514eb45cc8d7208e8d35864c4102","signature":"f8afe038abe81568f469130daca472fb7be83adf7b1f212af6c88ee505bccb25"},{"version":"7843ad58cd87b4f05b763ee2529d5033b4976ce382035ad56940e5421333a881","signature":"b519c0accf9ead969dae1e68bc6fbdc40ee09a620964533abbaec0a79e06bb2f"},{"version":"bf3d8eb0bc84896bd718e16ffd3242ab613b5038ccc6911138a9f176d009f3ba","signature":"6fa00514166a47945e40552cc4a86bf02f9dbadd3824152aa06aa9c1f33bfc6d"},{"version":"690a5a024c85d7af9c4bc5167cba52f0ec38cebfa6b0f02a4231fe19713c353a","signature":"6e21f50714ec4372056112508f15a2049126d5c872baefbfaccd85238a8f73e0"},{"version":"5cbc2158ab882ffc7cee918a4615273b034bddff06981b2ea0159985a2bfc0e8","signature":"ed6c0ac5972abd08c597a4a8a2963e6d38e5360805a87dc49c40cd247ec3e6a8"},{"version":"e32875bed8e71e5d0f768f568cef2b369ec6fa377e8d6c2bd7c16d159c446e3e","signature":"ccbef7021cf0157a58d8543544b3e9e36e3afc7f7c06c1fe7eafec7efb8956e5"},{"version":"d48b15b88a44803dff86441a47c28527ec6776ff5f9f5174925416ebd48d7243","signature":"58163bc26fa81bdcf6a6bad2a6d11049785658384837d550d1225f135052eca6"},{"version":"690a5a024c85d7af9c4bc5167cba52f0ec38cebfa6b0f02a4231fe19713c353a","signature":"221730b70b436f8a68f4a78a03bde90ba8ed5c8a91fd408e8c1c82c2f22690c3"},{"version":"fb2d94450ecefa5d5aafdddbaead3be7851f60ee640ca767fd157420de107031","signature":"d7600e24f1163ddf2ee8b67a7ac3bf5db91e0fb1ddf4227c16cd8695d659d18f"},{"version":"2a7560b1cb6d4f91f826c91296116707afe3844e700a6913e754ab1a1666eab2","signature":"1e990012e7983cd5c76c27cbdeba4ef362909be4e033b36559a929622d6ea876"},{"version":"72f66686356db0a28a50ef2cdc8f3090fd19b8af99a38e694a784890bbf2fc46","signature":"1e990012e7983cd5c76c27cbdeba4ef362909be4e033b36559a929622d6ea876"},{"version":"690a5a024c85d7af9c4bc5167cba52f0ec38cebfa6b0f02a4231fe19713c353a","signature":"29e640a8e8957ebd0c0ae74ea9874b2f08f5e68006a13b3690bd3e6db835f71e"},{"version":"c974216dd887bd740070ab6149cdf1d229681128db0e3b3e63c5831b6e5a297b","signature":"4a606c7174f9aa1917ef2c5e793b0da7913e237d30fe916e3f5c53c740d32feb"},{"version":"e420e515c767af879783c06b721ed56b8def324c94986c3c68dd298a242c0109","signature":"5df5c65bb934ed5b54d8827291645e680f842973c8718bee32c4a94069e103a6"},{"version":"04bc9e2aa8ba0e24cd1ac0412e04f7eda620e79c2568c7d7a563a1d6469cf3d6","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"690a5a024c85d7af9c4bc5167cba52f0ec38cebfa6b0f02a4231fe19713c353a","signature":"4f8935d2036180f8bf36f7cda2a2b8d65f669678984870f2eaa46f5e91e02072"},{"version":"9cbbeadba97307031520e54afe9d97adb96f07978b5b9355af803b4f0fd9fa14","signature":"b8c097878eb0f2b1eabf3ce4aad35d2ecd87b1e48f1de4a713fe8e010fe3f6e5"},{"version":"a5296dc92dd530b36527e0b9e0d8d64098387d58fbfd9b75bc615173710bfb22","signature":"c2daa10009be33ffffe9b0b9aa8a4973ec288a5508e3e924ecc68f3f1a05aa73"},{"version":"50af9f05c8c14400e2e654db0de71b8a3dcbe9a056f7f59b98f355a9c77a7c56","signature":"0e3b4b6a658192d99cbde1673f9bcbb9e8acec3b6d1a0e2049e935efce7a6698"},{"version":"6a63d80e2bcbeb94b2bfc8e8785798c52241197c48907df714a5bbbfc546ab7d","signature":"d7600e24f1163ddf2ee8b67a7ac3bf5db91e0fb1ddf4227c16cd8695d659d18f"},{"version":"2a7560b1cb6d4f91f826c91296116707afe3844e700a6913e754ab1a1666eab2","signature":"1e990012e7983cd5c76c27cbdeba4ef362909be4e033b36559a929622d6ea876"},{"version":"f3568b78c51c0eaa6208e18a24d5f932db096214a4a047e16e2952fa6aac3e20","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"690a5a024c85d7af9c4bc5167cba52f0ec38cebfa6b0f02a4231fe19713c353a","signature":"1a30a17de988f329704a45867761357a3e56b3b5949dba8de01e280351f0acbd"},{"version":"f023f56bf192bb8d3a10e656cdd365d0ac9d36024dc91dee1dc8886a5927420c","signature":"87b32b3608f4ce02d7131b8d18ac99f3cce429b1ff01818ed0a36a6098ce4c6e"},{"version":"abdfa3e09d37d63db9d2f4a01578c283cf3ef67af44b69f0f171b2fffb70654b","signature":"b574065749da1636587e6430d566a105c7cb60b7bf24429a2a53b39e947b2cca"},{"version":"61a9872e2f7a0aa6b4a21f036bd1202257c4a3ac248c8cbdab3d7ab5e8c24530","signature":"af4a0ec7d4c0f310dcdd93709ee541b44c11d9ffee14107f20d0c86ee36ad929"},{"version":"690a5a024c85d7af9c4bc5167cba52f0ec38cebfa6b0f02a4231fe19713c353a","signature":"f8a55ad542413f671f230b4023f54b9a60edc10e67272719fbc227882062b5a9"},{"version":"fbb5158d60ac1917beb99b62f514d9781276677987ed0112d7240b64bc88468b","signature":"d7600e24f1163ddf2ee8b67a7ac3bf5db91e0fb1ddf4227c16cd8695d659d18f"},{"version":"2a7560b1cb6d4f91f826c91296116707afe3844e700a6913e754ab1a1666eab2","signature":"1e990012e7983cd5c76c27cbdeba4ef362909be4e033b36559a929622d6ea876"},{"version":"11e43cb7483636b4b594e4c695ff2eeea74c83518e8bc4acc8874a0395c97c48","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"690a5a024c85d7af9c4bc5167cba52f0ec38cebfa6b0f02a4231fe19713c353a","signature":"1a30a17de988f329704a45867761357a3e56b3b5949dba8de01e280351f0acbd"},{"version":"6ba4e40c79a235f49c43533e0c3ecc39b5f3e5c94d3e6a340aef1c1948c8cca4","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"e7fae19caafb8b41e2ce6705a725f30baddaa2523137595a50f4098a00250353","signature":"3f4885b5af073c13b6f31f2c3abb2d0b47dde6c107f4e2da6effc79083e70039"},{"version":"6c1971b1ef9a8b843015e680052166e122c0fbe49a3cf8ffb357dbac6ef0f6ce","signature":"11d72634b38e2e7d9ab8a4f52662010376e50830ad852857d16ffbedd8a3b496"},{"version":"6d0015106f628b262842e5206987321769071c2cadf3cb99bd142db2e75aabb5","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"409bd5c7699db706e9b176afcda3f03a7ec0fc85257544d7184ed887e15fbacb","signature":"949c48021ab0f8d5ed14241b0fe797efd5414ca86567ccb53c5ac37f995c886f"},{"version":"36418dd9b4281991aa6b096f123a77bb4bb9b8d6564427813980b561fc056140","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"52abfe012e6f3751811a6a95c31656f073d7cba4c614b693d6dd661f743dd538","signature":"f48e7d217c19d6b0bb9dae45d1e703472caebdc4b06da9b3d7a760df9501e705"},{"version":"9cecd2093208086c1486c2765418e4aa090620a0d6ff193c5a537c81387eebf6","signature":"0061326d558f5e423506681cc75ed85ef13f87835d59d28b5a614742d70485a1"},{"version":"bb409549eff0557c51f60fd5ba3409560ec39f06800cd9e2a29de22a02d89712","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"3b802579ce8e09cb8fe1e9b9be6b73df3c37b7a951666caf650203cb0e9bb209","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"8daa5329562a959761c1c35e995dda6367b904bc631939db199f5b9fc2419137","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"0e3995e174ad08a98e91c411249d15e2b6aed4cf3b1438b39dd84f3bacde83c3","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"3ac37ece13e9bab69da5166baa4272affdc771469c7d28271e6c47e07f48ab4c","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"91106a5b9be3398e71729f182a13432bf7ce9e0554527015e4e818dda2c3e9bb","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"32695b2ac8527912097a5205f2564dde19cd7343de9a3f78b43a489add053d96","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"f180cdcbfd6c52fab93742caadb7b16d871fe925d8bd49f1e23fcaaa26c85387","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"32aaeb25b9b7e9c067c1ab26e99dd48f8cad3945b3f5eff231cbe6860c6b7a50","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"f8592a4dc96fd879fa0dccbb7498b66d489e06c767aad8f25ec7f7b16698be19","signature":"8809ef47fb1e5eaa7e8fa880eb2c8e71228837300b0abb5a72f6e09607104ff9"},{"version":"b060c231e45cf2b6d8f689b31e8b09823d2b0976b9105124b9ef4da433f56528","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"975f705d11ed080e67656c39ea3b134921cad73a6dc6c921a7dce72b82739a81","signature":"23cf424f9c2dd36f0b5575186f4573df15a9a7c1abde3d5fa2d73907ec6a7eda"},{"version":"285031dded391571dc4cf9e3be1bb1bf15b3771b5fa237ac0365e012816c4c67","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"777e70b20f712c12efa1725c0a96eda237733bf2fc020dfd98f31dee2b670c5b","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"8175b911625c67a01cf345e7dc0a03517191a85c5dbdc9ef6306241551dbffcd","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"450cbfba9e6e5eb96accb26c6c75a31d0f018a6eda0dd9a407778123ba045eaf","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"2a6c5a33ac04e9578bab2495d168f2482c78037a144a1d18c09ab55aad797b4e","signature":"db392d1edfbe6b0b50d944078441d1e4a6d4b357b5fde0374d2fe4314fbf107d"},{"version":"f33bb080cac8ff5d2f4a5cf60ef91706f236254ae0b868008bea767c74f5a7b4","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"76908abefb913859b0d5aa6a55e0ea01270a21ad02399bec95e9df092902b124","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"d20cbef7830eb4e327bf0e3693940ed8fc53bdf3e7166a90ff60b7fcd2acdee0","signature":"adb85e9733a81adb297d425caed0eea00d13a000fa634b14594fef8edd9ec024"},{"version":"9f310cf1cfb1c765fda6e6e5768aa6c7fca1243b994a5ca997759181590981ec","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"54fb69757912848ef5be2332c7e6a520d2cb8eeddf07ca128a0497f5c43b9363","signature":"adb85e9733a81adb297d425caed0eea00d13a000fa634b14594fef8edd9ec024"},{"version":"bd25366208b91d6bafe0041c1d58443c247a68710d8a614f47f565b7798f45dc","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"61b9c114b3e0787363a01a0213e46d8d0c779136e9f0aeedf4046074c6fbbf87","signature":"72024a6c9c8b87e090b9d9a1a6e2322235a7de726859a5ce8401c5069a87465b"},{"version":"b2c76981efbe8b4fb6b88e7e0d451a9ac3498cea786689d4a0cfcc1aceb0ba1d","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"9cad936e014102ec314530df983168a713d6661eade3cc9b2e8aacfd0d18d6ee","signature":"adb85e9733a81adb297d425caed0eea00d13a000fa634b14594fef8edd9ec024"},{"version":"2d95a52272da8ca2ec37da0ad7ddd089227e97dca9e9e0464b2d2be43fa572d9","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"67f4ad1ade1c7c1a1b177a84332b36b3d604e9a39d8a7fd8e3b7706bc278ea06","signature":"8d17e7a5580833d7a6d06a30c68066228d888a3e38c5ac7310d7493f0ebeec5c"},{"version":"34b41d4b5cc0c4a094eb51817fb0c53173f3fd59c3aa2e4aff42b53aa1a59476","signature":"84b26f043ed3e3e46891bef539d14172bfadc6a15844874441bdc6cfe7d7df08"},{"version":"cf9d9ca32be2070a00ff82e9a4d576e1ae315999e526b95285e6c8382d979f41","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"bd6a585ecb6eb73fc29256c6ef8b100e4bb47e28aeb38473f820a7b63e4da52b","signature":"eddbdaebfe55dc4350cad03706a187450c1464774370f154f73d4d12a6312ea8"},{"version":"0bfed83ae9c9c74bbb020467548eaf51afe75cb72eba1cc83ba45049b34e2607","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"9b2884a3729baeeb3708ff8a6edc53378713cbac697fa061035618cdc8845a95","signature":"eddbdaebfe55dc4350cad03706a187450c1464774370f154f73d4d12a6312ea8"},{"version":"da1ebb8a528155c78e9b278daaab1bb609fff3e8c6477add4bdb698b015358f6","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"2207ee1ef5d66c035d9245dbd0e1f09da53e13151252e1ad4892beb4301726ee","signature":"ce8fc2a222a0ca3b1aa6270c8428973e225f827b85cb099d8590a8727143c17d"},{"version":"28469d0d6d7825f55da5a0daa6fff57b5b5be551ffd119352992632a13f69ab9","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"a952c96a93b87fd33fb519f48d4ff50d30edbdff005e6c488453d837f528714a","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"d455a31c1e8b57a791b325d376a985b79aabf9bd954f8b974909e087408cd3db","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"4ba2afb0338a9116a5e7fb0c22af19098a4c7261a0555cd8fd05c93ae0cba2f2","signature":"db392d1edfbe6b0b50d944078441d1e4a6d4b357b5fde0374d2fe4314fbf107d"},{"version":"e23076b177e7f44d35c37c9645fa286efb8e155e298aeffd555bcbec9dd148c4","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"af2c52be7b6ea33fc0a9cc62e9e1709b4a6c3d82522c08f58df28e2ca82680ce","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"0c285f87cd0f498d364b27cc2ff54a36fdee9091a0f13a00e587313341415cc4","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"9e1f168fc16f07964cced00315dc5127d4de5ac744b698eac660af137418495d","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"0b5b656d443c1e8fdff0d18a6337712ce51101d869f841523abfdca018f3d65b","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"f002d86a49dfd48d8b6eb7f8c817e201f0d8bc95329c7d379914c8d66b047f32","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"5fe8cba90fd05514a212949ccf3023eb89815d3623eee04dac3556258ef9267c","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"b2b02f2f2c6dcfe8f71590005cafcaa6d6b80bcf0771c0f004c6e4d7b5b84402","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"5c00a2bcc6e3c6fd241864a4673644e13b975d46959b6653f489c493e2a66562","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"8e08ad059dc1d5c4b0c6ca3f40bf5820ed51a9af0ab5519f9c1d800a2968619f","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"d948ec6d0b9107601583e3ae3af2359519e0c2f1da78905154e1877c6ca4770f","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"bc0f0db364583c7cfeeed5a28499fbdbf691035183dfc39859fc31e689d1db21","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"52f5c39e78a90c1d8ed7db18f39d890b2e8464a3f44d4233617893f6648e317d","impliedFormat":1},{"version":"19726a169a4000cba269c284b97043faa0593de45865c43553c233f6825af0fb","impliedFormat":1},{"version":"21028948cfdb733523ceea3681a998c1f6dfd148484d3f92c4fd853119479135","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"365c25418c596a0ce608713cf26954f79c3a772b894a33bb92553092626a7c89","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"4982aa30c44f2e60ead9dbb4cf161061ec0111b0fd5c382e1b7aadf07695bdd0","signature":"875a5a4e27b5ec4596044f4ed2c66ae9d9167b33a7955dfd0f8638e685eefaf0"},{"version":"5144645ae774a6e01de125a35dfbf23fc59c648560a64d017718d7ba41fcc7eb","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"3312f7d9eb01483f9e392733e461f06755fdc624b5f2318e01f686a6a036ed7b","impliedFormat":1},{"version":"34491a67ae33c8bdacec1f4c07008f01d2ebe588ed8b7b1bd8f940f5fe953f2a","impliedFormat":1},{"version":"cc0e6f2705c8fd9eb831790840c08be6a3d3108d7c7043c4a1c0a97e3e9e289e","impliedFormat":1},{"version":"273928f388427cb6d6859c6b29d760de7612a110f8a50afe092d3a6440ed0cd3","impliedFormat":1},{"version":"54db43f6a831781a4587d81802277a9686bf34680c586fc0496e32088f2d8942","impliedFormat":1},{"version":"0f53259dab3f0531bfefb89211d4be171821c855980a843b396e9dcf06ab23a3","impliedFormat":1},{"version":"b1b1faeb576467d84ffaab5942f6bd5a024bb715dae28aaeeb22b37cc0f17030","impliedFormat":1},{"version":"a7380d88b8153951784d10b663b949986aa02c238d7aba129d378bc8f0bd2900","impliedFormat":1},{"version":"2110f6c3b26b0d0af8f4d0d7bf8fe89cafbe2a200cc2187db2e446c57628b67f","impliedFormat":1},{"version":"b2d0ca3686d89f74053a1d0d90e8088b9d48869c9814db2cce4554585c83094a","impliedFormat":1},{"version":"6491db94d895853640fd0c6814aa5decc2458a6085193abbd7a83a0a65736a30","impliedFormat":1},{"version":"ce8cd3fcda8947836cb52af1f9a5958fb9cea1ed5eb53466227a82c079ba5622","impliedFormat":1},{"version":"5a081b7e2596e450b5bbcd5c5556806b85bf2c0bdb6b7fbcd640dfa6339a0bb3","impliedFormat":1},{"version":"aac73aa91eb81c430a982c274181ae5768c1c631dd659e603a7070b0310d9d40","impliedFormat":1},{"version":"20c7945340b58e982aa79db5a549b5c33ef2dd8dd8c5c71d29c308be0a9ebaee","signature":"d5c7f7111fb2de4e422bf75540909f55a0a8db04fcc388dc245078ae8b93dfb4"},{"version":"65bc9af861d2b7b7eef963dd5f77f3f93b4b70e40bd09d3dcc481efc9cd9e3ff","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"27e71a2bc50062a65a09c235470415f30daf22f50a725e4cb1f483fc3f3caf1e","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"12ef08f711049716cb22a4f1e77a331f49b640134d9c19289690addacd83d766","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"5d5a30193ac10062960d2679da9e34adbe589aad7c4c80bb2e5380d7cdeb105d","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"84e4a43313428b2723f1316caa759144c5e2601784416c51d31ab4e77bcc25fb","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"aed983a78fb2aa231cf118edc699b9cbe731b3c4e3f2023b829d196a24b621d7","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"493607ce396819ce844d8aa37267a4e2d41ab8fea4b15b6f2568a3aade4c7b45","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"eb7dc1aecc02de71340df9fe20e6d7ac37cdae03756892a872bc4a8b43a11f29","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"6418aa13b4f8bdfcd2635cfa609c7e598063ac2d7de516aac055fe13123d4967","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"9a330e8a3bc218cbfe22f7fa109c16b21c0b08af272d85c6c3fee2100b49d9c0","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},{"version":"d7a967e4306c0ef742975cfc121736a576d45685db57e0544d16e2d7636cd0e3","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},"6bedf07a7ec7f488b8d5c650ae4c232a274ef9e52651ae1193137189ec9ef247",{"version":"1b8e4993b0a8abdc8e98f9c11fe535f583dce84039b8402e6afab966c3f84501","affectsGlobalScope":true},{"version":"7c3f548ca157e70e5a54055ac71977acb07fc5e7b69e2041d3387b144fafa9cb","affectsGlobalScope":true},"360938ae1ab9ddfffe8fee6efe46572956c7e900adefb11d4c9995874def011c",{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c906fb15bd2aabc9ed1e3f44eb6a8661199d6c320b3aa196b826121552cb3695","impliedFormat":1},{"version":"22295e8103f1d6d8ea4b5d6211e43421fe4564e34d0dd8e09e520e452d89e659","impliedFormat":1},{"version":"f949f7f6c7802a338039cfc2156d1fe285cdd1e092c64437ebe15ae8edc854e0","impliedFormat":1},{"version":"6b4e081d55ac24fc8a4631d5dd77fe249fa25900abd7d046abb87d90e3b45645","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"83e63d6ccf8ec004a3bb6d58b9bb0104f60e002754b1e968024b320730cc5311","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"a3fc63c0d7b031693f665f5494412ba4b551fe644ededccc0ab5922401079c95","impliedFormat":1},{"version":"f27524f4bef4b6519c604bdb23bf4465bddcccbf3f003abb901acbd0d7404d99","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"6b039f55681caaf111d5eb84d292b9bee9e0131d0db1ad0871eef0964f533c73","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"c8d3e5a18ba35629954e48c4cc8f11dc88224650067a172685c736b27a34a4dc","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2b55d426ff2b9087485e52ac4bc7cfafe1dc420fc76dad926cd46526567c501a","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"47613031a5a31510831304405af561b0ffaedb734437c595256bb61a90f9311b","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"8a1a0d0a4a06a8d278947fcb66bf684f117bf147f89b06e50662d79a53be3e9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"9f663c2f91127ef7024e8ca4b3b4383ff2770e5f826696005de382282794b127","impliedFormat":1},{"version":"9f55299850d4f0921e79b6bf344b47c420ce0f507b9dcf593e532b09ea7eeea1","impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"ee70b8037ecdf0de6c04f35277f253663a536d7e38f1539d270e4e916d225a3f","affectsGlobalScope":true,"impliedFormat":1},{"version":"a660aa95476042d3fdcc1343cf6bb8fdf24772d31712b1db321c5a4dcc325434","impliedFormat":1},{"version":"035d0934d304483f07148427a5bd5b98ac265dae914a6b49749fe23fbd893ec7","impliedFormat":99},{"version":"e2ed5b81cbed3a511b21a18ab2539e79ac1f4bc1d1d28f8d35d8104caa3b429f","impliedFormat":99},{"version":"161c8e0690c46021506e32fda85956d785b70f309ae97011fd27374c065cac9b","affectsGlobalScope":true,"impliedFormat":1},{"version":"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","impliedFormat":1},{"version":"7965dc3c7648e2a7a586d11781cabb43d4859920716bc2fdc523da912b06570d","impliedFormat":1},{"version":"90c2bd9a3e72fe08b8fa5982e78cb8dc855a1157b26e11e37a793283c52bf64b","impliedFormat":1},{"version":"a8122fe390a2a987079e06c573b1471296114677923c1c094c24a53ddd7344a2","impliedFormat":1},{"version":"70c2cb19c0c42061a39351156653aa0cf5ba1ecdc8a07424dd38e3a1f1e3c7f4","impliedFormat":1},{"version":"a8fb10fd8c7bc7d9b8f546d4d186d1027f8a9002a639bec689b5000dab68e35c","impliedFormat":1},{"version":"c9b467ea59b86bd27714a879b9ad43c16f186012a26d0f7110b1322025ceaa83","impliedFormat":1},{"version":"57ea19c2e6ba094d8087c721bac30ff1c681081dbd8b167ac068590ef633e7a5","impliedFormat":1},{"version":"cba81ec9ae7bc31a4dc56f33c054131e037649d6b9a2cfa245124c67e23e4721","impliedFormat":1},{"version":"ad193f61ba708e01218496f093c23626aa3808c296844a99189be7108a9c8343","impliedFormat":1},{"version":"a0544b3c8b70b2f319a99ea380b55ab5394ede9188cdee452a5d0ce264f258b2","impliedFormat":1},{"version":"8c654c17c334c7c168c1c36e5336896dc2c892de940886c1639bebd9fc7b9be4","impliedFormat":1},{"version":"6a4da742485d5c2eb6bcb322ae96993999ffecbd5660b0219a5f5678d8225bb0","impliedFormat":1},{"version":"c65ca21d7002bdb431f9ab3c7a6e765a489aa5196e7e0ef00aed55b1294df599","impliedFormat":1},{"version":"c8fc655c2c4bafc155ceee01c84ab3d6c03192ced5d3f2de82e20f3d1bd7f9fa","impliedFormat":1},{"version":"be5a7ff3b47f7e553565e9483bdcadb0ca2040ac9e5ec7b81c7e115a81059882","impliedFormat":1},{"version":"1a93f36ecdb60a95e3a3621b561763e2952da81962fae217ab5441ac1d77ffc5","impliedFormat":1},{"version":"2a771d907aebf9391ac1f50e4ad37952943515eeea0dcc7e78aa08f508294668","impliedFormat":1},{"version":"0146fd6262c3fd3da51cb0254bb6b9a4e42931eb2f56329edd4c199cb9aaf804","impliedFormat":1},{"version":"183f480885db5caa5a8acb833c2be04f98056bdcc5fb29e969ff86e07efe57ab","impliedFormat":99},{"version":"4ec16d7a4e366c06a4573d299e15fe6207fc080f41beac5da06f4af33ea9761e","impliedFormat":1},{"version":"bf6402a3cfff440801c3ea5835f08784aac18087016534b48741adbcee931921","impliedFormat":1},{"version":"71b110829b8f5e7653352a132544ece2b9a10e93ba1c77453187673bd46f13ee","impliedFormat":1},{"version":"7c0ace9de3109ecdd8ad808dd40a052b82681786c66bb0bff6d848c1fc56a7c4","impliedFormat":1},{"version":"1223780c318ef42fd33ac772996335ed92d57cf7c0fc73178acab5e154971aab","impliedFormat":1},{"version":"0d04cbe88c8a25c2debd2eef03ec5674563e23ca9323fa82ede3577822653bd2","impliedFormat":1},{"version":"aaa70439f135c3fa0a34313de49e94cae3db954c8b8d6af0d56a46c998c2923f","impliedFormat":1},{"version":"4ace083580c1b77eb8ddf4ea915cde605af1a96e426c4c04b897feef1acdb534","impliedFormat":1},{"version":"daf07c1ca8ccfb21ad958833546a4f414c418fe096dcebdbb90b02e12aa5c3a2","impliedFormat":1},{"version":"89ac5224feeb2de76fc52fc2a91c5f6448a98dbe4e8d726ecb1730fa64cd2d30","impliedFormat":1},{"version":"7feb39ba69b3fc6d55faca4f91f06d77d15ffedd3931b0ef7740e8b6fd488b15","impliedFormat":1},{"version":"acf00cfabe8c4de18bea655754ea39c4d04140257556bbf283255b695d00e36f","impliedFormat":1},{"version":"39b70d5f131fcfdeba404ee63aba25f26d8376a73bacd8275fb5a9f06219ac77","impliedFormat":1},{"version":"cdae26c737cf4534eeec210e42eab2d5f0c3855240d8dde3be4aee9194e4e781","impliedFormat":1},{"version":"5aa0c50083d0d9a423a46afaef78c7f42420759cfa038ad40e8b9e6cafc38831","impliedFormat":1},{"version":"10d6a49a99a593678ba4ea6073d53d005adfc383df24a9e93f86bf47de6ed857","impliedFormat":1},{"version":"1b7ea32849a7982047c2e5d372300a4c92338683864c9ab0f5bbd1acadae83a3","impliedFormat":1},{"version":"224083e6fcec1d300229da3d1dafc678c642863996cbfed7290df20954435a55","impliedFormat":1},{"version":"4248ac3167b1a1ce199fda9307abc314b3132527aeb94ec30dbcfe4c6a417b1b","impliedFormat":1},{"version":"633cb8c2c51c550a63bda0e3dec0ad5fa1346d1682111917ad4bc7005d496d8c","impliedFormat":1},{"version":"ca055d26105248f745ea6259b4c498ebeed18c9b772e7f2b3a16f50226ff9078","impliedFormat":1},{"version":"ea6b2badb951d6dfa24bb7d7eb733327e5f9a15fc994d6dc1c54b2c7a83b6a0b","impliedFormat":1},{"version":"03fdf8dba650d830388b9985750d770dd435f95634717f41cea814863a9ac98b","impliedFormat":1},{"version":"6fd08e3ef1568cd0dc735c9015f6765e25143a4a0331d004a29c51b50eec402a","impliedFormat":1},{"version":"2e988cd4d24edac4936449630581c79686c8adac10357eb0cdb410c24f47c7f0","impliedFormat":1},{"version":"b813f62a37886ed986b0f6f8c5bf323b3fcae32c1952b71d75741e74ea9353cf","impliedFormat":1},{"version":"44a1a722038365972b1b52841e1132785bf5d75839dbc6cc1339f2d36f8507a1","impliedFormat":1},{"version":"83fe1053701101ac6d25364696fea50d2ceb2f81d1456bc11e682a20aaeac52e","impliedFormat":1},{"version":"4f228cb2089a5a135a1a8cefe612d5aebcef8258f7dbe3b7c4dad4e26a81ec08","impliedFormat":1},{"version":"7870becb94cbc11d2d01b77c4422589adcba4d8e59f726246d40cd0d129784d8","affectsGlobalScope":true,"impliedFormat":1},{"version":"f70b8328a15ca1d10b1436b691e134a49bc30dcf3183a69bfaa7ba77e1b78ecd","impliedFormat":1},{"version":"683b035f752e318d02e303894e767a1ac16ac4493baa2b593195d7976e6b7310","impliedFormat":99},{"version":"2be2227c3810dfd84e46674fd33b8d09a4a28ad9cb633ed536effd411665ea1e","impliedFormat":99},{"version":"e134052a6b1ded61693b4037f615dc72f14e2881e79c1ddbff6c514c8a516b05","impliedFormat":1},{"version":"957a44f864ab3c182edc747428e8eec1765257deee7fac86c1147eeac897d832","impliedFormat":1},{"version":"3feec212c0aeb91e5a6e62caaf9f128954590210f8c302910ea377c088f6b61a","impliedFormat":99},{"version":"bbdfaf7d9b20534c5df1e1b937a20f17ca049d603a2afe072983bf7aff2279f5","impliedFormat":99},{"version":"86d818ada2f5f0cfffca153af94205b67ba50f8e36524a413d66652f34ef19af","impliedFormat":99},{"version":"40afd49a15d0bafef682b42664ff21c274e02dcc60052f2df85dd53c70d9394f","impliedFormat":99},{"version":"5a5b1dd91662e93efae28d985e0e44d10f6a7e3c2c2ae8abc29bcfc406cb5310","impliedFormat":99},{"version":"66d0a61b3b0df6c9c2eb09dbe26e3c2aef71d9043fed17cd56de6669cb706325","impliedFormat":99},{"version":"f6692c3a1847d846bc4b7a690ef2ba096b2ca56bea5818f073eb8193ce33b5e1","impliedFormat":99},{"version":"1e4d27cf43aa16d164e958a220fee3c225b9dd146b1912cbc12083263f157ca9","impliedFormat":99},{"version":"a46147f499d4246998d1e44b43beecd2ee04c0a330c35863eaeccc827a737fdf","impliedFormat":1},{"version":"390140c96dcaf0831d24b5408d19af017e3a8f150fed140791d976ac20dd2da7","impliedFormat":99},{"version":"3181a53b0974a6fa4c6f8cf78cf2945248949467f1fc1d3ddb058b0efe6c4f00","impliedFormat":99},{"version":"13e7c1f8ddda39d034935e667f3a314ec8b89b8be18fbd4cd987ea4312b4221f","impliedFormat":99},{"version":"678307b1f5a25d7fb9b7307a7ccd8d146115b28f74315c48511d1e1fdf9f8166","impliedFormat":99},{"version":"ba6f2f79892f59ea9bf645e15ad70658fc76dfbbba32669c2957b7547210e6ff","impliedFormat":99},{"version":"768fd34f23de8dc5f5df6cd45f044bb4193105b5964e4ef734dbfc1a1f8e6223","impliedFormat":1},{"version":"376d229cb7d2f7a4d5fbfb2eb5df262c31385b0c314fffa6660ba7ea4a5937f1","impliedFormat":99},{"version":"0ebf97879a0c2914ab35ef84b5802a5acbc8b6a7fc3ad952c1f8bb568026e571","impliedFormat":99},{"version":"81d3389164d84254c3869f799509672d323d5027a9766c0fa4c22b12c9be6bc5","impliedFormat":99},{"version":"ca6cd2c9c706f1d84fe86e3f87e3aa779256ed9ca3a2adcca81931faab807683","impliedFormat":99},{"version":"cf76eeea2b4ec3fe26520cd129cfc32352d1ddb22b6d4ff0c6a709656a4b1b37","impliedFormat":1},{"version":"fea0cb28540b473977c722853998d39d28575fa12e31b3371fcf1f324e3a9fb7","impliedFormat":1},{"version":"ee4ee9bf6c6d276343e7f0bce3a5374800eb4ec6b2d7c70fab6ae3ef840d9777","impliedFormat":1},{"version":"571ba264349552a1111ac0d6a5ed580a41c390aac43a70546c3a7374c77faa71","impliedFormat":1},{"version":"4ad34258acf819cf5f356e000d833974ddb2c2d76f9d50e0783d316986782dd3","signature":"4b96dd19fd2949d28ce80e913412b0026dc421e5bf6c31d87c7b5eb11b5753b4"}],"root":[93,111,[128,150],[1105,1118],[1414,1431],[1434,1445],[1520,1523],[1525,1566],[1950,1956],[1972,1976],[2058,2083],2098,2099,2101,2102,2114,2118,[2121,2279],[2282,2285],[2300,2315],2504],"options":{"allowImportingTsExtensions":true,"composite":true,"esModuleInterop":true,"jsx":1,"jsxImportSource":"vue","module":99,"noImplicitThis":true,"skipLibCheck":true,"strict":true,"target":99,"useDefineForClassFields":true,"verbatimModuleSyntax":true},"referencedMap":[[2313,1],[2312,2],[93,3],[105,4],[96,5],[95,6],[748,7],[742,6],[746,7],[745,8],[741,7],[740,6],[749,9],[747,8],[743,8],[744,8],[1119,10],[1120,10],[1121,10],[1122,10],[1123,10],[1124,10],[1125,10],[1126,10],[1127,10],[1128,10],[1129,10],[1130,10],[1131,10],[1132,10],[1133,10],[1134,10],[1135,10],[1136,10],[1137,10],[1138,10],[1139,10],[1140,10],[1141,10],[1142,10],[1143,10],[1144,10],[1145,10],[1146,10],[1147,10],[1148,10],[1149,10],[1150,10],[1151,10],[1152,10],[1153,10],[1154,10],[1155,10],[1156,10],[1157,10],[1158,10],[1159,10],[1160,10],[1161,10],[1162,10],[1163,10],[1164,10],[1165,10],[1166,10],[1167,10],[1168,10],[1169,10],[1170,10],[1171,10],[1172,10],[1173,10],[1174,10],[1175,10],[1176,10],[1177,10],[1178,10],[1179,10],[1180,10],[1181,10],[1182,10],[1183,10],[1184,10],[1185,10],[1186,10],[1187,10],[1188,10],[1189,10],[1190,10],[1191,10],[1192,10],[1193,10],[1194,10],[1195,10],[1196,10],[1197,10],[1198,10],[1199,10],[1200,10],[1201,10],[1202,10],[1203,10],[1204,10],[1205,10],[1206,10],[1207,10],[1208,10],[1209,10],[1210,10],[1211,10],[1212,10],[1213,10],[1214,10],[1215,10],[1216,10],[1217,10],[1218,10],[1219,10],[1220,10],[1221,10],[1222,10],[1223,10],[1224,10],[1225,10],[1226,10],[1227,10],[1228,10],[1229,10],[1230,10],[1231,10],[1232,10],[1233,10],[1234,10],[1235,10],[1236,10],[1237,10],[1238,10],[1239,10],[1240,10],[1241,10],[1242,10],[1243,10],[1244,10],[1245,10],[1246,10],[1247,10],[1248,10],[1249,10],[1250,10],[1251,10],[1252,10],[1253,10],[1254,10],[1255,10],[1256,10],[1257,10],[1258,10],[1259,10],[1260,10],[1412,11],[1261,10],[1262,10],[1263,10],[1264,10],[1265,10],[1266,10],[1267,10],[1268,10],[1269,10],[1270,10],[1271,10],[1272,10],[1273,10],[1274,10],[1275,10],[1276,10],[1277,10],[1278,10],[1279,10],[1280,10],[1281,10],[1282,10],[1283,10],[1284,10],[1285,10],[1286,10],[1287,10],[1288,10],[1289,10],[1290,10],[1291,10],[1292,10],[1293,10],[1294,10],[1295,10],[1296,10],[1297,10],[1298,10],[1299,10],[1300,10],[1301,10],[1302,10],[1303,10],[1304,10],[1305,10],[1306,10],[1307,10],[1308,10],[1309,10],[1310,10],[1311,10],[1312,10],[1313,10],[1314,10],[1315,10],[1316,10],[1317,10],[1318,10],[1319,10],[1320,10],[1321,10],[1322,10],[1323,10],[1324,10],[1325,10],[1326,10],[1327,10],[1328,10],[1329,10],[1330,10],[1331,10],[1332,10],[1333,10],[1334,10],[1335,10],[1336,10],[1337,10],[1338,10],[1339,10],[1340,10],[1341,10],[1342,10],[1343,10],[1344,10],[1345,10],[1346,10],[1347,10],[1348,10],[1349,10],[1350,10],[1351,10],[1352,10],[1353,10],[1354,10],[1355,10],[1356,10],[1357,10],[1358,10],[1359,10],[1360,10],[1361,10],[1362,10],[1363,10],[1364,10],[1365,10],[1366,10],[1367,10],[1368,10],[1369,10],[1370,10],[1371,10],[1372,10],[1373,10],[1374,10],[1375,10],[1376,10],[1377,10],[1378,10],[1379,10],[1380,10],[1381,10],[1382,10],[1383,10],[1384,10],[1385,10],[1386,10],[1387,10],[1388,10],[1389,10],[1390,10],[1391,10],[1392,10],[1393,10],[1394,10],[1395,10],[1396,10],[1397,10],[1398,10],[1399,10],[1400,10],[1401,10],[1402,10],[1403,10],[1404,10],[1405,10],[1406,10],[1407,10],[1408,10],[1409,10],[1410,10],[1411,10],[1413,12],[633,13],[635,14],[632,6],[634,6],[2119,10],[525,15],[521,16],[508,6],[524,17],[517,18],[515,19],[514,19],[513,18],[510,19],[511,18],[519,20],[512,19],[509,18],[516,19],[522,21],[523,22],[518,23],[520,19],[1971,24],[1970,25],[1967,26],[1966,27],[1957,6],[1958,6],[1960,28],[1959,6],[1969,29],[1961,27],[1962,30],[1965,31],[1963,6],[1964,27],[1968,6],[1593,24],[1567,10],[1568,32],[1569,10],[1570,10],[1571,33],[1949,34],[1592,6],[1590,35],[1589,6],[1923,36],[1922,37],[1921,6],[1905,38],[1904,10],[1907,39],[1908,40],[1906,41],[1910,42],[1909,6],[1913,43],[1914,44],[1912,43],[1911,6],[1943,45],[1942,10],[1915,10],[1945,46],[1925,47],[1924,10],[1916,6],[1918,48],[1917,6],[1920,49],[1919,41],[1927,10],[1941,50],[1940,51],[1939,10],[1926,10],[1930,10],[1934,52],[1932,53],[1933,10],[1931,10],[1929,54],[1928,6],[1936,55],[1935,6],[1938,56],[1937,10],[1891,6],[1947,57],[1946,10],[1948,58],[1900,59],[1899,60],[1898,61],[1901,62],[1902,63],[1897,64],[1903,65],[1944,6],[1896,66],[1895,67],[1892,6],[1893,68],[1894,69],[1779,70],[1714,71],[1715,72],[1716,73],[1717,74],[1718,75],[1719,76],[1720,77],[1721,78],[1722,79],[1723,80],[1724,81],[1725,82],[1726,83],[1727,84],[1728,85],[1729,86],[1769,87],[1730,88],[1731,89],[1732,90],[1733,91],[1734,92],[1735,93],[1736,94],[1737,95],[1738,96],[1739,97],[1740,98],[1741,99],[1742,100],[1743,101],[1744,102],[1745,103],[1746,104],[1747,105],[1748,106],[1749,107],[1750,108],[1751,109],[1752,110],[1753,111],[1754,112],[1755,113],[1756,114],[1757,115],[1758,116],[1759,117],[1760,118],[1761,119],[1762,120],[1763,121],[1764,122],[1765,123],[1766,124],[1767,125],[1768,126],[1778,127],[1703,6],[1709,128],[1711,129],[1713,130],[1770,131],[1771,130],[1772,130],[1773,132],[1777,133],[1774,130],[1775,130],[1776,130],[1780,134],[1781,135],[1782,136],[1783,136],[1784,137],[1785,136],[1786,136],[1787,138],[1788,136],[1789,139],[1790,139],[1791,139],[1792,140],[1793,139],[1794,141],[1795,136],[1796,139],[1797,137],[1798,140],[1799,136],[1800,136],[1801,137],[1802,140],[1803,140],[1804,137],[1805,136],[1806,142],[1807,143],[1808,137],[1809,137],[1810,139],[1811,136],[1812,136],[1813,137],[1814,136],[1831,144],[1815,136],[1816,135],[1817,135],[1818,135],[1819,139],[1820,139],[1821,140],[1822,140],[1823,137],[1824,135],[1825,135],[1826,145],[1827,146],[1828,136],[1829,135],[1830,147],[1867,148],[1705,70],[1837,149],[1832,150],[1833,150],[1834,150],[1835,151],[1836,152],[1708,153],[1707,153],[1712,142],[1838,154],[1706,70],[1842,155],[1839,156],[1840,156],[1841,157],[1843,135],[1710,158],[1844,139],[1845,140],[1846,6],[1847,6],[1848,6],[1849,6],[1850,6],[1851,6],[1866,159],[1852,6],[1853,6],[1854,6],[1855,6],[1856,6],[1857,6],[1858,6],[1859,6],[1860,6],[1861,6],[1862,6],[1863,6],[1864,6],[1865,6],[1869,160],[1870,161],[1871,162],[1875,160],[1876,163],[1877,164],[1701,165],[1700,166],[1704,167],[1702,168],[1872,169],[1873,170],[1874,171],[1878,172],[1884,173],[1879,10],[1880,10],[1881,174],[1882,175],[1883,174],[2097,176],[2094,177],[2093,178],[2084,6],[2085,6],[2087,179],[2086,6],[2096,180],[2088,178],[2089,181],[2092,182],[2090,6],[2091,178],[2095,6],[2420,6],[2020,6],[179,183],[180,183],[181,183],[182,183],[183,183],[184,183],[185,183],[186,183],[187,183],[188,183],[189,183],[190,183],[191,183],[192,183],[193,183],[194,183],[195,183],[196,183],[197,183],[198,183],[199,183],[200,183],[201,183],[202,183],[203,183],[204,183],[205,183],[206,183],[207,183],[208,183],[209,183],[210,183],[211,183],[212,183],[213,183],[214,183],[215,183],[216,183],[217,183],[218,183],[219,183],[220,183],[221,183],[222,183],[223,183],[224,183],[225,183],[226,183],[227,183],[228,183],[229,183],[230,183],[231,183],[232,183],[233,183],[234,183],[235,183],[236,183],[237,183],[238,183],[239,183],[240,183],[241,183],[242,183],[243,183],[244,183],[245,183],[246,183],[247,183],[248,183],[249,183],[250,183],[251,183],[252,183],[253,183],[254,183],[255,183],[256,183],[257,183],[258,183],[259,183],[260,183],[261,183],[262,183],[263,183],[264,183],[265,183],[266,183],[267,183],[268,183],[269,183],[270,183],[271,183],[272,183],[273,183],[274,183],[275,183],[483,184],[276,183],[277,183],[278,183],[279,183],[280,183],[281,183],[282,183],[283,183],[284,183],[285,183],[286,183],[287,183],[288,183],[289,183],[290,183],[291,183],[292,183],[293,183],[294,183],[295,183],[296,183],[297,183],[298,183],[299,183],[300,183],[301,183],[302,183],[303,183],[304,183],[305,183],[306,183],[307,183],[308,183],[309,183],[310,183],[311,183],[312,183],[313,183],[314,183],[315,183],[316,183],[317,183],[318,183],[319,183],[320,183],[321,183],[322,183],[323,183],[324,183],[325,183],[326,183],[327,183],[328,183],[329,183],[330,183],[331,183],[332,183],[333,183],[334,183],[335,183],[336,183],[337,183],[338,183],[339,183],[340,183],[341,183],[342,183],[343,183],[344,183],[345,183],[346,183],[347,183],[348,183],[349,183],[350,183],[351,183],[352,183],[353,183],[354,183],[355,183],[356,183],[357,183],[358,183],[359,183],[360,183],[361,183],[362,183],[363,183],[364,183],[365,183],[366,183],[367,183],[368,183],[369,183],[370,183],[371,183],[372,183],[373,183],[374,183],[375,183],[376,183],[377,183],[378,183],[379,183],[380,183],[381,183],[382,183],[383,183],[384,183],[385,183],[386,183],[387,183],[388,183],[389,183],[390,183],[391,183],[392,183],[393,183],[394,183],[395,183],[396,183],[397,183],[398,183],[399,183],[400,183],[401,183],[402,183],[403,183],[404,183],[405,183],[406,183],[407,183],[408,183],[409,183],[410,183],[411,183],[412,183],[413,183],[414,183],[415,183],[416,183],[417,183],[418,183],[419,183],[420,183],[421,183],[422,183],[423,183],[424,183],[425,183],[426,183],[427,183],[428,183],[429,183],[430,183],[431,183],[432,183],[433,183],[434,183],[435,183],[436,183],[437,183],[438,183],[439,183],[440,183],[441,183],[442,183],[443,183],[444,183],[445,183],[446,183],[447,183],[448,183],[449,183],[450,183],[451,183],[452,183],[453,183],[454,183],[455,183],[456,183],[457,183],[458,183],[459,183],[460,183],[461,183],[462,183],[463,183],[464,183],[465,183],[466,183],[467,183],[468,183],[469,183],[470,183],[471,183],[472,183],[473,183],[474,183],[475,183],[476,183],[477,183],[478,183],[479,183],[480,183],[481,183],[482,183],[116,185],[117,186],[115,187],[118,188],[119,189],[120,190],[121,191],[122,192],[123,193],[124,194],[125,195],[126,196],[127,197],[2366,198],[2367,198],[2368,199],[2321,200],[2369,201],[2370,202],[2371,203],[2316,6],[2319,204],[2317,6],[2318,6],[2372,205],[2373,206],[2374,207],[2375,208],[2376,209],[2377,210],[2378,210],[2379,211],[2380,212],[2381,213],[2382,214],[2322,6],[2320,6],[2383,215],[2384,216],[2385,217],[2419,218],[2386,219],[2387,6],[2388,220],[2389,221],[2390,222],[2391,223],[2392,224],[2393,225],[2394,226],[2395,227],[2396,228],[2397,228],[2398,229],[2399,6],[2400,230],[2401,231],[2403,232],[2402,233],[2404,234],[2405,235],[2406,236],[2407,237],[2408,238],[2409,239],[2410,240],[2411,241],[2412,242],[2413,243],[2414,244],[2415,245],[2416,246],[2323,6],[2324,6],[2325,6],[2363,247],[2364,6],[2365,6],[2417,248],[2418,249],[2501,250],[2046,251],[2045,251],[2485,252],[2482,253],[2484,254],[2483,255],[97,256],[98,257],[2480,258],[99,259],[100,260],[102,261],[94,6],[109,262],[108,10],[2024,263],[2038,264],[2039,265],[2040,266],[2044,267],[2025,268],[2051,269],[2052,270],[2043,271],[2029,272],[2033,273],[2023,274],[2031,275],[2032,276],[2030,271],[2028,274],[2026,277],[2042,278],[2027,279],[2048,280],[2049,281],[2047,282],[2022,283],[2041,6],[2053,284],[2055,285],[2056,286],[1981,6],[1979,6],[1980,3],[1977,6],[2054,6],[1978,6],[834,287],[833,6],[114,6],[101,6],[687,288],[686,289],[685,6],[1524,290],[2021,6],[2105,291],[2107,292],[2109,293],[2111,294],[1433,295],[2113,296],[2104,297],[2106,297],[2108,297],[1432,6],[2110,297],[2112,297],[2103,6],[503,298],[501,299],[502,300],[507,301],[504,302],[505,303],[506,304],[1062,305],[1060,10],[1061,306],[1058,307],[1059,308],[654,309],[652,310],[653,311],[661,312],[659,313],[657,314],[655,315],[656,316],[658,317],[660,318],[665,319],[662,10],[663,320],[664,321],[669,322],[666,302],[667,323],[668,324],[2115,3],[676,325],[672,326],[673,327],[670,302],[671,328],[674,328],[675,329],[683,330],[679,331],[680,332],[677,333],[678,331],[681,334],[682,335],[692,336],[684,302],[688,337],[689,338],[690,339],[691,340],[696,341],[693,302],[694,342],[695,343],[703,344],[699,302],[700,345],[697,302],[698,346],[701,345],[702,347],[710,348],[708,349],[709,350],[707,351],[706,352],[705,353],[704,354],[717,355],[714,356],[715,357],[716,358],[720,359],[718,360],[719,361],[727,362],[723,363],[724,364],[725,365],[721,366],[722,363],[726,367],[730,368],[728,369],[729,370],[739,371],[738,10],[737,372],[733,373],[734,374],[731,302],[732,375],[735,375],[736,376],[753,377],[751,378],[752,379],[750,380],[756,381],[754,382],[755,383],[784,384],[780,385],[781,386],[782,387],[783,388],[790,389],[786,10],[785,10],[787,10],[788,10],[789,10],[793,390],[791,391],[792,392],[807,393],[803,394],[802,395],[806,396],[805,397],[804,290],[811,398],[808,399],[810,400],[809,401],[815,402],[814,302],[812,403],[813,404],[765,405],[764,394],[760,302],[761,406],[762,407],[763,407],[2117,408],[818,409],[816,410],[817,411],[821,412],[819,413],[820,414],[828,415],[823,302],[824,10],[825,416],[822,417],[826,418],[827,419],[832,420],[829,302],[830,421],[831,422],[845,423],[841,424],[837,425],[840,426],[838,427],[839,428],[844,429],[842,430],[843,424],[836,431],[835,432],[848,433],[846,434],[847,435],[852,436],[850,437],[851,438],[854,439],[849,440],[853,441],[1095,442],[1079,443],[1078,10],[857,444],[855,445],[856,446],[861,447],[858,448],[859,449],[860,450],[539,451],[536,333],[537,452],[538,453],[768,454],[766,455],[767,456],[1084,457],[1083,458],[1081,459],[1082,458],[1080,460],[1071,461],[1068,462],[1069,463],[1070,464],[1067,6],[871,465],[869,466],[868,10],[866,10],[864,467],[865,468],[863,469],[867,302],[870,6],[862,470],[1087,471],[1085,472],[1086,473],[759,474],[758,475],[757,476],[1090,477],[1089,478],[1088,479],[873,480],[872,481],[2116,482],[876,483],[874,484],[875,485],[879,486],[878,10],[877,302],[882,487],[880,488],[881,489],[1094,490],[1093,10],[1091,491],[1092,492],[535,493],[532,494],[529,10],[526,495],[533,496],[534,497],[527,498],[528,499],[530,500],[531,501],[885,502],[883,503],[884,504],[893,505],[892,506],[888,507],[889,508],[890,509],[891,506],[886,510],[887,511],[896,512],[894,513],[895,514],[899,515],[897,516],[898,517],[903,518],[902,10],[900,519],[901,520],[910,521],[909,10],[904,522],[905,523],[907,524],[906,10],[908,525],[1066,526],[1065,527],[1064,528],[1063,6],[936,529],[925,530],[923,531],[911,6],[924,532],[926,533],[927,534],[935,535],[933,10],[929,302],[932,536],[928,537],[931,538],[934,539],[930,540],[941,541],[939,542],[940,543],[937,544],[938,545],[946,546],[945,547],[943,302],[944,548],[942,549],[950,550],[948,10],[947,481],[949,551],[1077,552],[1075,553],[1076,554],[1073,555],[1074,556],[1072,10],[953,557],[951,558],[952,559],[959,560],[956,561],[957,562],[954,563],[955,564],[958,6],[962,565],[960,566],[961,567],[995,568],[973,10],[975,569],[965,570],[972,4],[976,571],[986,572],[978,573],[980,574],[983,575],[987,576],[984,577],[985,578],[992,579],[991,580],[982,581],[989,582],[988,583],[970,584],[990,585],[963,6],[967,586],[977,587],[979,588],[981,569],[974,6],[994,589],[966,590],[969,591],[971,592],[968,593],[964,594],[993,595],[779,596],[770,597],[769,598],[773,599],[777,600],[774,601],[775,602],[776,603],[772,604],[778,605],[771,606],[1003,607],[998,608],[1000,609],[999,610],[1001,611],[997,612],[996,613],[1002,614],[713,615],[711,616],[712,617],[1006,618],[1004,333],[1005,619],[801,620],[796,621],[794,622],[799,623],[800,624],[797,338],[795,625],[798,626],[1009,627],[1007,628],[1008,629],[1014,630],[1011,631],[1012,632],[1010,302],[1013,633],[651,634],[650,635],[646,636],[645,637],[648,638],[649,639],[647,313],[1057,640],[1051,641],[1055,642],[1056,643],[1053,644],[1054,645],[1052,646],[1019,647],[1017,648],[1016,649],[1015,650],[1018,651],[1031,652],[1030,653],[1029,654],[1036,655],[1035,656],[1034,657],[1032,658],[1033,659],[1028,660],[1026,661],[1024,662],[1023,663],[1021,664],[1027,6],[1020,665],[1022,666],[1025,667],[1047,668],[1037,669],[1046,10],[1041,670],[1040,671],[1045,672],[1044,673],[1043,674],[1042,675],[1038,676],[1039,677],[922,678],[920,679],[921,680],[915,681],[916,549],[912,549],[913,6],[918,682],[919,681],[914,683],[1050,684],[1048,685],[1049,686],[167,6],[172,6],[168,6],[169,6],[173,6],[174,687],[170,6],[171,6],[1096,688],[1097,10],[1102,689],[1101,690],[1098,10],[1099,10],[644,691],[643,10],[540,10],[541,10],[641,10],[637,10],[629,302],[542,692],[543,10],[642,302],[626,6],[636,693],[640,460],[544,10],[630,10],[625,460],[628,10],[612,694],[614,695],[615,10],[616,302],[613,10],[638,10],[627,10],[619,495],[617,10],[618,10],[620,6],[639,333],[621,10],[622,10],[623,6],[624,6],[631,10],[1104,696],[611,697],[546,6],[547,6],[548,6],[549,6],[550,6],[551,6],[552,6],[553,6],[554,6],[555,6],[556,6],[557,6],[545,6],[558,6],[559,6],[560,6],[561,6],[562,6],[563,6],[564,6],[565,6],[566,6],[567,6],[568,6],[569,6],[570,6],[571,6],[572,6],[573,6],[574,6],[575,6],[576,6],[577,6],[578,6],[579,6],[580,6],[581,6],[582,6],[583,6],[584,6],[585,6],[586,6],[587,6],[588,6],[589,6],[590,6],[591,6],[592,6],[593,6],[594,6],[595,6],[596,6],[597,6],[598,6],[599,6],[600,6],[601,6],[602,6],[603,6],[604,6],[605,6],[606,6],[607,6],[110,6],[609,6],[610,6],[608,6],[1103,698],[485,699],[488,692],[151,6],[156,6],[152,6],[157,700],[153,6],[154,6],[155,10],[499,6],[489,6],[490,259],[491,6],[500,701],[492,702],[493,6],[494,6],[495,259],[498,6],[496,259],[497,6],[158,6],[159,10],[178,703],[161,704],[165,705],[163,706],[164,707],[162,6],[166,10],[175,708],[160,10],[176,708],[177,10],[487,709],[486,710],[2425,6],[2120,711],[1447,712],[1448,713],[1446,6],[1502,714],[1454,715],[1456,716],[1449,712],[1503,717],[1455,718],[1460,719],[1461,718],[1462,720],[1463,718],[1464,721],[1465,720],[1466,718],[1467,718],[1499,722],[1494,723],[1495,718],[1496,718],[1468,718],[1469,718],[1497,718],[1470,718],[1490,718],[1493,718],[1492,718],[1491,718],[1471,718],[1472,718],[1473,719],[1474,718],[1475,718],[1488,718],[1477,718],[1476,718],[1500,718],[1479,718],[1498,718],[1478,718],[1489,718],[1481,722],[1482,718],[1484,720],[1483,718],[1485,718],[1501,718],[1486,718],[1487,718],[1452,724],[1451,6],[1457,725],[1459,726],[1453,6],[1458,727],[1480,727],[1450,728],[1505,729],[1512,730],[1513,730],[1515,731],[1514,730],[1504,732],[1518,733],[1507,734],[1509,735],[1517,736],[1510,737],[1508,738],[1516,739],[1511,740],[1506,741],[2050,6],[2453,6],[1519,6],[484,742],[2478,6],[917,6],[2486,6],[1100,6],[1695,6],[113,743],[2442,744],[2440,745],[2441,746],[2429,747],[2430,745],[2437,748],[2428,749],[2433,750],[2443,6],[2434,751],[2439,752],[2445,753],[2444,754],[2427,755],[2435,756],[2436,757],[2431,758],[2438,744],[2432,759],[1696,760],[1699,761],[1697,165],[1698,762],[2422,763],[2421,764],[2466,765],[2447,6],[2467,766],[2449,767],[2474,768],[2468,6],[2470,769],[2471,769],[2472,770],[2469,6],[2473,771],[2452,772],[2450,6],[2451,773],[2465,774],[2448,6],[2463,775],[2454,776],[2455,777],[2456,777],[2457,776],[2464,778],[2458,777],[2459,775],[2460,776],[2461,777],[2462,776],[2035,779],[2034,780],[2037,781],[2036,782],[1982,780],[2001,783],[1994,6],[1985,784],[1983,780],[1986,780],[1984,785],[1987,780],[1989,780],[1988,780],[1991,780],[1990,780],[1993,780],[1992,780],[1995,786],[1996,780],[2000,787],[1997,788],[1998,780],[1999,780],[2017,789],[2003,789],[2011,789],[2002,6],[2019,790],[2013,791],[2015,6],[2018,792],[2006,793],[2007,793],[2009,793],[2005,794],[2012,795],[2008,793],[2004,793],[2014,789],[2016,796],[2010,797],[2426,6],[2490,798],[2489,6],[1868,799],[2299,800],[2286,6],[2296,6],[2292,6],[2293,6],[2287,6],[2297,6],[2298,6],[2295,6],[2291,6],[2290,6],[2294,801],[2288,6],[2289,6],[1580,802],[1579,10],[1625,10],[1574,10],[1575,6],[1576,803],[1644,10],[1645,804],[1646,10],[1648,805],[1647,10],[1581,10],[1649,10],[1650,10],[1678,806],[1679,807],[1674,10],[1651,808],[1652,808],[1654,809],[1653,810],[1655,10],[1656,808],[1680,10],[1682,811],[1658,812],[1657,10],[1669,10],[1670,808],[1671,808],[1672,808],[1683,806],[1659,10],[1587,813],[1584,10],[1585,814],[1586,6],[1578,815],[1577,6],[1626,10],[1673,10],[1681,816],[1597,817],[1595,818],[1596,819],[1624,820],[1676,6],[1677,821],[1662,822],[1629,823],[1630,824],[1631,810],[1632,825],[1684,10],[1685,826],[1633,810],[1634,827],[1635,828],[1686,810],[1687,829],[1688,830],[1689,831],[1622,832],[1623,833],[1663,810],[1664,834],[1690,835],[1691,836],[1603,10],[1636,810],[1638,837],[1637,810],[1639,838],[1641,839],[1573,840],[1693,841],[1692,842],[1886,843],[1885,844],[1694,6],[1888,845],[1887,816],[1665,846],[1666,847],[1583,848],[1582,10],[1643,849],[1642,810],[1668,850],[1667,851],[1889,852],[1890,853],[1588,854],[1628,855],[1627,856],[1660,857],[1675,858],[1661,6],[1609,820],[1615,6],[1614,859],[1618,6],[1602,6],[1604,835],[1612,860],[1613,6],[1600,861],[1601,862],[1591,6],[1598,863],[1621,864],[1606,865],[1572,6],[1594,866],[1611,6],[1617,867],[1616,10],[1599,816],[1610,868],[1607,6],[1605,6],[1620,869],[1608,820],[1619,6],[1640,6],[84,6],[85,6],[15,6],[13,6],[14,6],[19,6],[18,6],[2,6],[20,6],[21,6],[22,6],[23,6],[24,6],[25,6],[26,6],[27,6],[3,6],[28,6],[29,6],[4,6],[30,6],[34,6],[31,6],[32,6],[33,6],[35,6],[36,6],[37,6],[5,6],[38,6],[39,6],[40,6],[41,6],[6,6],[45,6],[42,6],[43,6],[44,6],[46,6],[7,6],[47,6],[52,6],[53,6],[48,6],[49,6],[50,6],[51,6],[8,6],[57,6],[54,6],[55,6],[56,6],[58,6],[9,6],[59,6],[60,6],[61,6],[63,6],[62,6],[64,6],[65,6],[10,6],[66,6],[67,6],[68,6],[11,6],[69,6],[70,6],[71,6],[72,6],[73,6],[1,6],[74,6],[75,6],[12,6],[79,6],[77,6],[82,6],[81,6],[86,6],[76,6],[80,6],[78,6],[83,6],[17,6],[16,6],[2479,6],[2341,870],[2351,871],[2340,870],[2361,872],[2332,873],[2331,874],[2360,250],[2354,875],[2359,876],[2334,877],[2348,878],[2333,879],[2357,880],[2329,881],[2328,250],[2358,882],[2330,883],[2335,884],[2336,6],[2339,884],[2326,6],[2362,885],[2352,886],[2343,887],[2344,888],[2346,889],[2342,890],[2345,891],[2355,250],[2337,892],[2338,893],[2347,894],[2327,895],[2350,886],[2349,884],[2353,6],[2356,896],[2491,897],[2487,898],[2488,899],[2493,900],[2494,901],[2492,6],[2498,902],[2497,903],[2499,904],[2496,905],[2500,906],[2502,907],[2503,906],[92,908],[2477,909],[2424,910],[2423,911],[88,911],[87,6],[89,912],[90,6],[91,913],[2475,914],[2446,6],[2476,915],[2100,6],[112,10],[2281,916],[2280,10],[106,10],[107,917],[2481,255],[103,918],[104,919],[2057,10],[2495,6],[1534,920],[1551,920],[1542,920],[1552,920],[1553,920],[1430,920],[1554,920],[1536,920],[1543,920],[1423,920],[1421,920],[1427,920],[1544,921],[1545,920],[1443,920],[1546,920],[1547,920],[1555,920],[1556,920],[1557,920],[1558,920],[1559,920],[1548,920],[1549,920],[1560,920],[1561,920],[1562,920],[1563,920],[150,920],[1564,920],[1565,920],[1550,920],[1429,920],[1566,920],[131,922],[1538,923],[1951,924],[1952,925],[1972,926],[1537,927],[1973,928],[1974,929],[1975,930],[1976,929],[2065,931],[2066,932],[2067,929],[2068,933],[2070,934],[2071,935],[2069,936],[2072,937],[2074,938],[2075,939],[2073,940],[2078,941],[2076,939],[2079,942],[2077,939],[2059,943],[2061,944],[2063,945],[2064,946],[2062,929],[1444,947],[2080,948],[2081,929],[2082,928],[2058,949],[1950,950],[1520,951],[2083,952],[2098,953],[128,940],[138,940],[111,940],[132,940],[129,940],[130,940],[2099,954],[1414,4],[147,955],[2060,4],[143,956],[2101,957],[2102,958],[1540,4],[2114,959],[2118,960],[2121,961],[2123,962],[2125,963],[2126,4],[1415,964],[144,965],[145,964],[146,928],[1107,966],[148,967],[149,964],[1106,968],[1108,969],[141,970],[142,971],[1114,972],[1109,973],[1111,974],[1112,975],[1113,976],[1115,977],[1541,978],[1539,979],[2124,956],[2127,980],[1528,981],[1527,982],[2122,983],[1535,984],[134,985],[140,986],[137,987],[136,988],[135,940],[1953,940],[1954,940],[2128,940],[1445,940],[1521,940],[2129,940],[1105,989],[2130,4],[1439,990],[1956,940],[1431,991],[1531,992],[1529,993],[1533,994],[1530,995],[139,996],[1955,940],[1110,997],[133,940],[1532,940],[1418,940],[1419,998],[1417,999],[1416,1000],[2131,1001],[2132,1002],[2133,1003],[2134,1004],[2135,1005],[2136,1006],[2137,1007],[2138,1008],[2139,1009],[2145,1010],[2143,1011],[2142,1012],[2141,1013],[2144,1014],[2140,1015],[2147,1016],[2146,1017],[2148,1016],[2149,1016],[2150,1018],[2151,1019],[2152,1020],[2153,1021],[2154,1022],[2155,932],[2156,1021],[2157,1023],[2158,1024],[2159,1025],[2160,1026],[2161,1027],[2162,1028],[2163,1029],[2171,1030],[2167,1031],[2172,1032],[2165,929],[1425,1033],[2173,1034],[2166,1030],[2168,1035],[2169,1036],[2175,1037],[2176,1035],[2177,1038],[2174,1039],[2179,1040],[2180,1041],[2181,1042],[2178,940],[2183,1043],[2184,1044],[2185,1045],[2182,940],[1424,940],[2187,1046],[2188,1047],[2189,1048],[2186,940],[2191,1049],[2192,1050],[2193,1051],[2190,940],[2195,1052],[2196,1053],[2197,1054],[2194,940],[2199,1055],[2200,1056],[2201,1057],[2198,940],[2203,1058],[2204,929],[2205,1059],[2202,940],[2207,1060],[2208,1061],[2206,940],[2210,1062],[2211,929],[2212,1063],[2209,940],[2214,1064],[2215,1065],[2216,1066],[2213,940],[2218,1067],[2219,929],[2220,1068],[2217,940],[2221,1069],[2164,1070],[1426,1071],[2223,1072],[2222,928],[2224,1073],[2170,1074],[2226,1075],[2229,1076],[2227,1077],[2228,1078],[2225,1079],[2230,1080],[2231,1081],[1422,1082],[2232,1083],[2233,1080],[1118,1084],[1117,1084],[1116,1085],[1428,1086],[2234,1087],[2235,1088],[2240,1089],[2241,1090],[2236,1091],[2238,1092],[2237,1093],[2239,1094],[2242,929],[2243,1095],[2244,1096],[2245,1097],[2246,1098],[2247,1099],[2248,1100],[2249,1101],[2250,1102],[2251,1103],[2252,1104],[2253,1105],[2254,1106],[2255,1107],[2256,1108],[2257,1109],[2258,1110],[2259,1111],[2260,1112],[2261,1111],[2262,1113],[2263,1114],[2264,1115],[2265,1116],[2266,1117],[2267,1118],[2268,1119],[2269,1120],[2270,1121],[2271,1122],[2272,1123],[2273,1124],[2274,1125],[2275,1126],[2276,1127],[2277,1128],[2278,1129],[2279,1130],[2282,1131],[2284,1132],[2283,1133],[2285,1134],[1525,1135],[1442,1136],[1441,1137],[2300,1138],[1434,1139],[1438,1137],[1437,1137],[1435,1140],[1436,1140],[1440,1141],[1523,1142],[1522,1143],[2301,1144],[1526,1145],[2302,1146],[2303,929],[2304,1147],[2305,929],[2306,929],[2307,929],[2308,929],[2309,1148],[2310,1149],[1420,1150],[2311,1151],[2314,6],[2315,1152],[2504,1153]],"semanticDiagnosticsPerFile":[[1428,[{"start":1757,"length":4,"code":2322,"category":1,"messageText":{"messageText":"Type '\"\" | \"danger\" | \"info\"' is not assignable to type '\"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\" | undefined'.","category":1,"code":2322,"next":[{"messageText":"Type '\"\"' is not assignable to type '\"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\" | undefined'.","category":1,"code":2322}]},"relatedInformation":[{"file":"./node_modules/element-plus/es/components/tag/src/tag.vue.d.ts","start":846,"length":4,"messageText":"The expected type comes from property 'type' which is declared here on type 'Partial<{ type: \"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\"; effect: \"light\" | \"dark\" | \"plain\"; }> & Omit<{ readonly type: \"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\"; ... 8 more ...; onClose?: ((evt: MouseEvent) => any) | undefined; } & VNodeProps & AllowedComponentProps & ComponentCustomProps,...'","category":3,"code":6500}]},{"start":7601,"length":4,"code":2322,"category":1,"messageText":"Type 'string' is not assignable to type '\"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\" | undefined'.","relatedInformation":[{"file":"./node_modules/element-plus/es/components/tag/src/tag.vue.d.ts","start":846,"length":4,"messageText":"The expected type comes from property 'type' which is declared here on type 'Partial<{ type: \"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\"; effect: \"light\" | \"dark\" | \"plain\"; }> & Omit<{ readonly type: \"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\"; ... 8 more ...; onClose?: ((evt: MouseEvent) => any) | undefined; } & VNodeProps & AllowedComponentProps & ComponentCustomProps,...'","category":3,"code":6500}]}]],[1434,[{"start":14231,"length":34,"code":2322,"category":1,"messageText":"Type 'string' is not assignable to type 'number'."}]],[1953,[{"start":10172,"length":13,"code":2339,"category":1,"messageText":"Property 'captureStream' does not exist on type 'HTMLVideoElement'."}]],[2065,[{"start":860,"length":28,"code":7016,"category":1,"messageText":{"messageText":"Could not find a declaration file for module '@wangeditor/editor-for-vue'. '/Users/long/Work/zyt/admin/node_modules/@wangeditor/editor-for-vue/dist/index.esm.js' implicitly has an 'any' type.","category":1,"code":7016,"next":[{"info":{"moduleReference":"@wangeditor/editor-for-vue","mode":99}}]}}]],[2161,[{"start":72181,"length":19,"code":2322,"category":1,"messageText":{"messageText":"Type '{ name: any; code: any; children: any; }[]' is not assignable to type 'never[]'.","category":1,"code":2322,"next":[{"messageText":"Type '{ name: any; code: any; children: any; }' is not assignable to type 'never'.","category":1,"code":2322}]}},{"start":72443,"length":962,"code":2322,"category":1,"messageText":"Type '{ name: string; children: { name: string; children: { name: string; }[]; }[]; }' is not assignable to type 'never'."},{"start":73419,"length":457,"code":2322,"category":1,"messageText":"Type '{ name: string; children: { name: string; children: { name: string; }[]; }[]; }' is not assignable to type 'never'."},{"start":73890,"length":457,"code":2322,"category":1,"messageText":"Type '{ name: string; children: { name: string; children: { name: string; }[]; }[]; }' is not assignable to type 'never'."},{"start":74361,"length":780,"code":2322,"category":1,"messageText":"Type '{ name: string; children: { name: string; children: { name: string; }[]; }[]; }' is not assignable to type 'never'."},{"start":48414,"length":6,"code":2322,"category":1,"messageText":{"messageText":"Type '(value: string[]) => void' is not assignable to type '(value: CascaderValue | null | undefined) => any'.","category":1,"code":2322,"next":[{"messageText":"Types of parameters 'value' and 'value' are incompatible.","category":1,"code":2328,"next":[{"messageText":"Type 'CascaderValue | null | undefined' is not assignable to type 'string[]'.","category":1,"code":2322,"next":[{"messageText":"Type 'undefined' is not assignable to type 'string[]'.","category":1,"code":2322}]}]}]},"relatedInformation":[{"file":"./node_modules/element-plus/es/components/cascader/src/cascader.vue.d.ts","start":3298,"length":8,"messageText":"The expected type comes from property 'onChange' which is declared here on type '__VLS_NormalizeComponentEvent<NonNullable<Partial<{ disabled: boolean; separator: string; props: CascaderProps; placement: Placement; options: CascaderOption[]; effect: PopperEffect; ... 15 more ...; showCheckedStrategy: \"parent\" | \"child\"; }> & Omit<...> & Record<...>>, { ...; }, \"onChange\", \"change\", \"change\">'","category":3,"code":6500}]}]],[2163,[{"start":108901,"length":19,"code":2322,"category":1,"messageText":{"messageText":"Type '{ value: any; label: any; code: any; children: any; }[]' is not assignable to type 'never[]'.","category":1,"code":2322,"next":[{"messageText":"Type '{ value: any; label: any; code: any; children: any; }' is not assignable to type 'never'.","category":1,"code":2322}]}},{"start":137588,"length":1,"messageText":"Parameter 'v' implicitly has an 'any' type.","category":1,"code":7006},{"start":144513,"length":15,"code":2322,"category":1,"messageText":{"messageText":"Type 'string | number | undefined' is not assignable to type 'number | undefined'.","category":1,"code":2322,"next":[{"messageText":"Type 'string' is not assignable to type 'number'.","category":1,"code":2322}]},"relatedInformation":[{"file":"./src/api/tcm.ts","start":12001,"length":15,"messageText":"The expected type comes from property 'medication_days' which is declared here on type '{ id: number; dose_count?: number | undefined; medication_days?: number | undefined; }'","category":3,"code":6500}]},{"start":150039,"length":15,"code":2353,"category":1,"messageText":"Object literal may only specify known properties, and 'tracking_number' does not exist in type '{ fulfillment_status?: number | undefined; }'."},{"start":156950,"length":18,"code":2353,"category":1,"messageText":"Object literal may only specify known properties, and 'completion_request' does not exist in type '{ id: number; order_type: number; pay_amount: number; pay_remark?: string | undefined; }'."},{"start":157456,"length":13,"code":2561,"category":1,"messageText":"Object literal may only specify known properties, but 'pay_order_ids' does not exist in type '{ id: number; pay_order_id: number; }'. Did you mean to write 'pay_order_id'?"},{"start":20647,"length":10,"code":2345,"category":1,"messageText":{"messageText":"Argument of type 'Record<string, any>' is not assignable to parameter of type '{ id: number; }'.","category":1,"code":2345,"next":[{"messageText":"Property 'id' is missing in type 'Record<string, any>' but required in type '{ id: number; }'.","category":1,"code":2741}]},"relatedInformation":[{"start":141636,"length":2,"messageText":"'id' is declared here.","category":3,"code":2728}]},{"start":21125,"length":10,"code":2345,"category":1,"messageText":{"messageText":"Argument of type 'Record<string, any>' is not assignable to parameter of type '{ id: number; }'.","category":1,"code":2345,"next":[{"messageText":"Property 'id' is missing in type 'Record<string, any>' but required in type '{ id: number; }'.","category":1,"code":2741}]},"relatedInformation":[{"start":158522,"length":2,"messageText":"'id' is declared here.","category":3,"code":2728}]},{"start":21571,"length":10,"code":2345,"category":1,"messageText":{"messageText":"Argument of type 'Record<string, any>' is not assignable to parameter of type '{ id: number; }'.","category":1,"code":2345,"next":[{"messageText":"Property 'id' is missing in type 'Record<string, any>' but required in type '{ id: number; }'.","category":1,"code":2741}]},"relatedInformation":[{"start":141636,"length":2,"messageText":"'id' is declared here.","category":3,"code":2728}]},{"start":22041,"length":10,"code":2345,"category":1,"messageText":{"messageText":"Argument of type 'Record<string, any>' is not assignable to parameter of type '{ id: number; }'.","category":1,"code":2345,"next":[{"messageText":"Property 'id' is missing in type 'Record<string, any>' but required in type '{ id: number; }'.","category":1,"code":2741}]},"relatedInformation":[{"start":159378,"length":2,"messageText":"'id' is declared here.","category":3,"code":2728}]},{"start":22477,"length":10,"code":2345,"category":1,"messageText":{"messageText":"Argument of type 'Record<string, any>' is not assignable to parameter of type '{ id: number; express_company?: unknown; tracking_number?: unknown; }'.","category":1,"code":2345,"next":[{"messageText":"Property 'id' is missing in type 'Record<string, any>' but required in type '{ id: number; express_company?: unknown; tracking_number?: unknown; }'.","category":1,"code":2741}]},"relatedInformation":[{"start":150925,"length":2,"messageText":"'id' is declared here.","category":3,"code":2728}]},{"start":22932,"length":10,"code":2345,"category":1,"messageText":{"messageText":"Argument of type 'Record<string, any>' is not assignable to parameter of type '{ id: number; diagnosis_id?: number | undefined; pay_order_ids?: number[] | undefined; }'.","category":1,"code":2345,"next":[{"messageText":"Property 'id' is missing in type 'Record<string, any>' but required in type '{ id: number; diagnosis_id?: number | undefined; pay_order_ids?: number[] | undefined; }'.","category":1,"code":2741}]},"relatedInformation":[{"start":155751,"length":2,"messageText":"'id' is declared here.","category":3,"code":2728}]},{"start":23382,"length":10,"code":2345,"category":1,"messageText":{"messageText":"Argument of type 'Record<string, any>' is not assignable to parameter of type '{ id: number; }'.","category":1,"code":2345,"next":[{"messageText":"Property 'id' is missing in type 'Record<string, any>' but required in type '{ id: number; }'.","category":1,"code":2741}]},"relatedInformation":[{"start":158282,"length":2,"messageText":"'id' is declared here.","category":3,"code":2728}]},{"start":61553,"length":7,"code":2322,"category":1,"messageText":{"messageText":"Type 'string | number | undefined' is not assignable to type 'number | null | undefined'.","category":1,"code":2322,"next":[{"messageText":"Type 'string' is not assignable to type 'number'.","category":1,"code":2322}]},"relatedInformation":[{"file":"./node_modules/element-plus/es/components/input-number/src/input-number.d.ts","start":752,"length":10,"messageText":"The expected type comes from property 'modelValue' which is declared here on type 'Partial<{ disabled: boolean; id: string; valueOnClear: number | \"max\" | \"min\" | null; min: number; max: number; inputmode: \"url\" | \"text\" | \"search\" | \"email\" | \"tel\" | \"none\" | \"numeric\" | \"decimal\"; ... 6 more ...; stepStrictly: boolean; }> & Omit<...> & Record<...>'","category":3,"code":6500}]},{"start":73445,"length":7,"code":2322,"category":1,"messageText":{"messageText":"Type 'string | number | undefined' is not assignable to type 'number | null | undefined'.","category":1,"code":2322,"next":[{"messageText":"Type 'string' is not assignable to type 'number'.","category":1,"code":2322}]},"relatedInformation":[{"file":"./node_modules/element-plus/es/components/input-number/src/input-number.d.ts","start":752,"length":10,"messageText":"The expected type comes from property 'modelValue' which is declared here on type 'Partial<{ disabled: boolean; id: string; valueOnClear: number | \"max\" | \"min\" | null; min: number; max: number; inputmode: \"url\" | \"text\" | \"search\" | \"email\" | \"tel\" | \"none\" | \"numeric\" | \"decimal\"; ... 6 more ...; stepStrictly: boolean; }> & Omit<...> & Record<...>'","category":3,"code":6500}]},{"start":100716,"length":1,"messageText":"Parameter 'r' implicitly has an 'any' type.","category":1,"code":7006}]],[2175,[{"start":316,"length":8,"code":2345,"category":1,"messageText":{"messageText":"Argument of type '{ modelValue: any; }' is not assignable to parameter of type '{ readonly modelValue: any[]; readonly max?: number | undefined; readonly min?: number | undefined; readonly itemData: any; readonly \"onUpdate:modelValue\"?: ((value: any) => any) | undefined; } & VNodeProps & AllowedComponentProps & ComponentCustomProps & Record<...>'.","category":1,"code":2345,"next":[{"messageText":"Property 'itemData' is missing in type '{ modelValue: any; }' but required in type '{ readonly modelValue: any[]; readonly max?: number | undefined; readonly min?: number | undefined; readonly itemData: any; readonly \"onUpdate:modelValue\"?: ((value: any) => any) | undefined; }'.","category":1,"code":2741,"canonicalHead":{"code":2322,"messageText":"Type '{ modelValue: any; }' is not assignable to type '{ readonly modelValue: any[]; readonly max?: number | undefined; readonly min?: number | undefined; readonly itemData: any; readonly \"onUpdate:modelValue\"?: ((value: any) => any) | undefined; }'."}}]},"relatedInformation":[{"file":"./src/views/decoration/component/tabbar/pc/menu-set.vue","start":3919,"length":8,"messageText":"'itemData' is declared here.","category":3,"code":2728}]},{"start":442,"length":8,"code":2345,"category":1,"messageText":{"messageText":"Argument of type '{ modelValue: any; }' is not assignable to parameter of type '{ readonly modelValue: any[]; readonly max?: number | undefined; readonly min?: number | undefined; readonly itemData: any; readonly \"onUpdate:modelValue\"?: ((value: any) => any) | undefined; } & VNodeProps & AllowedComponentProps & ComponentCustomProps & Record<...>'.","category":1,"code":2345,"next":[{"messageText":"Property 'itemData' is missing in type '{ modelValue: any; }' but required in type '{ readonly modelValue: any[]; readonly max?: number | undefined; readonly min?: number | undefined; readonly itemData: any; readonly \"onUpdate:modelValue\"?: ((value: any) => any) | undefined; }'.","category":1,"code":2741,"canonicalHead":{"code":2322,"messageText":"Type '{ modelValue: any; }' is not assignable to type '{ readonly modelValue: any[]; readonly max?: number | undefined; readonly min?: number | undefined; readonly itemData: any; readonly \"onUpdate:modelValue\"?: ((value: any) => any) | undefined; }'."}}]},"relatedInformation":[{"file":"./src/views/decoration/component/tabbar/pc/menu-set.vue","start":3919,"length":8,"messageText":"'itemData' is declared here.","category":3,"code":2728}]}]],[2188,[{"start":190,"length":6,"code":2339,"category":1,"messageText":"Property 'height' does not exist on type '{}'."}]],[2230,[{"start":5579,"length":5,"messageText":"Parameter 'depts' implicitly has an 'any' type.","category":1,"code":7006},{"start":5607,"length":6,"messageText":"Variable 'result' implicitly has type 'any[]' in some locations where its type cannot be determined.","category":1,"code":7034},{"start":5645,"length":4,"messageText":"Parameter 'dept' implicitly has an 'any' type.","category":1,"code":7006},{"start":5811,"length":6,"messageText":"Variable 'result' implicitly has an 'any[]' type.","category":1,"code":7005},{"start":5906,"length":6,"messageText":"Variable 'result' implicitly has an 'any[]' type.","category":1,"code":7005}]],[2233,[{"start":10049,"length":47,"code":2769,"category":1,"messageText":{"messageText":"No overload matches this call.","category":1,"code":2769,"next":[{"messageText":"Overload 1 of 3, '(callbackfn: (previousValue: unknown, currentValue: unknown, currentIndex: number, array: unknown[]) => unknown, initialValue: unknown): unknown', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Argument of type '(total: number, count: number) => number' is not assignable to parameter of type '(previousValue: unknown, currentValue: unknown, currentIndex: number, array: unknown[]) => unknown'.","category":1,"code":2345,"next":[{"messageText":"Types of parameters 'total' and 'previousValue' are incompatible.","category":1,"code":2328,"next":[{"messageText":"Type 'unknown' is not assignable to type 'number'.","category":1,"code":2322}]}]}]},{"messageText":"Overload 2 of 3, '(callbackfn: (previousValue: number, currentValue: unknown, currentIndex: number, array: unknown[]) => number, initialValue: number): number', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Argument of type '(total: number, count: number) => number' is not assignable to parameter of type '(previousValue: number, currentValue: unknown, currentIndex: number, array: unknown[]) => number'.","category":1,"code":2345,"next":[{"messageText":"Types of parameters 'count' and 'currentValue' are incompatible.","category":1,"code":2328,"next":[{"messageText":"Type 'unknown' is not assignable to type 'number'.","category":1,"code":2322}]}]}]}]},"relatedInformation":[]},{"start":10250,"length":47,"code":2769,"category":1,"messageText":{"messageText":"No overload matches this call.","category":1,"code":2769,"next":[{"messageText":"Overload 1 of 3, '(callbackfn: (previousValue: unknown, currentValue: unknown, currentIndex: number, array: unknown[]) => unknown, initialValue: unknown): unknown', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Argument of type '(total: number, count: number) => number' is not assignable to parameter of type '(previousValue: unknown, currentValue: unknown, currentIndex: number, array: unknown[]) => unknown'.","category":1,"code":2345,"next":[{"messageText":"Types of parameters 'total' and 'previousValue' are incompatible.","category":1,"code":2328,"next":[{"messageText":"Type 'unknown' is not assignable to type 'number'.","category":1,"code":2322}]}]}]},{"messageText":"Overload 2 of 3, '(callbackfn: (previousValue: number, currentValue: unknown, currentIndex: number, array: unknown[]) => number, initialValue: number): number', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Argument of type '(total: number, count: number) => number' is not assignable to parameter of type '(previousValue: number, currentValue: unknown, currentIndex: number, array: unknown[]) => number'.","category":1,"code":2345,"next":[{"messageText":"Types of parameters 'count' and 'currentValue' are incompatible.","category":1,"code":2328,"next":[{"messageText":"Type 'unknown' is not assignable to type 'number'.","category":1,"code":2322}]}]}]}]},"relatedInformation":[]},{"start":4609,"length":4,"code":2322,"category":1,"messageText":"Type 'string' is not assignable to type '\"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\" | undefined'.","relatedInformation":[{"file":"./node_modules/element-plus/es/components/tag/src/tag.vue.d.ts","start":846,"length":4,"messageText":"The expected type comes from property 'type' which is declared here on type 'Partial<{ type: \"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\"; effect: \"light\" | \"dark\" | \"plain\"; }> & Omit<{ readonly type: \"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\"; ... 8 more ...; onClose?: ((evt: MouseEvent) => any) | undefined; } & VNodeProps & AllowedComponentProps & ComponentCustomProps,...'","category":3,"code":6500}]},{"start":6777,"length":4,"code":2322,"category":1,"messageText":"Type 'string' is not assignable to type '\"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\" | undefined'.","relatedInformation":[{"file":"./node_modules/element-plus/es/components/tag/src/tag.vue.d.ts","start":846,"length":4,"messageText":"The expected type comes from property 'type' which is declared here on type 'Partial<{ type: \"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\"; effect: \"light\" | \"dark\" | \"plain\"; }> & Omit<{ readonly type: \"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\"; ... 8 more ...; onClose?: ((evt: MouseEvent) => any) | undefined; } & VNodeProps & AllowedComponentProps & ComponentCustomProps,...'","category":3,"code":6500}]}]],[2234,[{"start":7456,"length":4,"code":2322,"category":1,"messageText":"Type 'string' is not assignable to type '\"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\" | undefined'.","relatedInformation":[{"file":"./node_modules/element-plus/es/components/tag/src/tag.vue.d.ts","start":846,"length":4,"messageText":"The expected type comes from property 'type' which is declared here on type 'Partial<{ type: \"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\"; effect: \"light\" | \"dark\" | \"plain\"; }> & Omit<{ readonly type: \"primary\" | \"success\" | \"warning\" | \"danger\" | \"info\"; ... 8 more ...; onClose?: ((evt: MouseEvent) => any) | undefined; } & VNodeProps & AllowedComponentProps & ComponentCustomProps,...'","category":3,"code":6500}]}]],[2244,[{"start":386,"length":10,"code":2322,"category":1,"messageText":{"messageText":"Type '(opts?: { silent?: boolean; }) => Promise<any>' is not assignable to type '(name: TabPaneName) => any'.","category":1,"code":2322,"next":[{"messageText":"Types of parameters 'opts' and 'name' are incompatible.","category":1,"code":2328,"next":[{"messageText":"Type 'TabPaneName' is not assignable to type '{ silent?: boolean | undefined; } | undefined'.","category":1,"code":2322,"next":[{"messageText":"Type 'string' has no properties in common with type '{ silent?: boolean | undefined; }'.","category":1,"code":2559}]}]}]},"relatedInformation":[{"file":"./node_modules/element-plus/es/components/tabs/src/tabs.d.ts","start":8466,"length":11,"messageText":"The expected type comes from property 'onTabChange' which is declared here on type '__VLS_NormalizeComponentEvent<NonNullable<Partial<{ readonly tabindex: EpPropMergeType<readonly [StringConstructor, NumberConstructor], unknown, unknown>; readonly stretch: boolean; ... 5 more ...; readonly addable: boolean; }> & Omit<...> & Record<...>>, { ...; }, \"onTabChange\", \"tab-change\", \"tabChange\">'","category":3,"code":6500}]}]],[2247,[{"start":46757,"length":34,"messageText":"This comparison appears to be unintentional because the types '\"supplement\"' and '\"normal\"' have no overlap.","category":1,"code":2367},{"start":18780,"length":28,"messageText":"This comparison appears to be unintentional because the types '\"supplement\"' and '\"normal\"' have no overlap.","category":1,"code":2367}]],[2248,[{"start":723,"length":5,"code":2353,"category":1,"messageText":"Object literal may only specify known properties, and 'value' does not exist in type 'TreeOptionProps'.","relatedInformation":[{"file":"./node_modules/element-plus/es/components/tree-select/src/tree-select.vue.d.ts","start":31111,"length":5,"messageText":"The expected type comes from property 'props' which is declared here on type 'Partial<{ data: TreeData; disabled: EpPropMergeType<BooleanConstructor, unknown, unknown>; tabindex: EpPropMergeType<(NumberConstructor | StringConstructor)[], unknown, unknown>; ... 48 more ...; cacheData: unknown[]; }> & Omit<...> & Record<...>'","category":3,"code":6500}]}]],[2252,[{"start":1689,"length":5,"code":2353,"category":1,"messageText":"Object literal may only specify known properties, and 'value' does not exist in type 'TreeOptionProps'.","relatedInformation":[{"file":"./node_modules/element-plus/es/components/tree-select/src/tree-select.vue.d.ts","start":31111,"length":5,"messageText":"The expected type comes from property 'props' which is declared here on type 'Partial<{ data: TreeData; disabled: EpPropMergeType<BooleanConstructor, unknown, unknown>; tabindex: EpPropMergeType<(NumberConstructor | StringConstructor)[], unknown, unknown>; ... 48 more ...; cacheData: unknown[]; }> & Omit<...> & Record<...>'","category":3,"code":6500}]}]],[2285,[{"start":31557,"length":6,"code":2349,"category":1,"messageText":{"messageText":"This expression is not callable.","category":1,"code":2349,"next":[{"messageText":"Type 'String' has no call signatures.","category":1,"code":2757}]},"relatedInformation":[{"start":31557,"length":6,"messageText":"Are you missing a semicolon?","category":1,"code":2734}]},{"start":32314,"length":2,"code":2349,"category":1,"messageText":{"messageText":"This expression is not callable.","category":1,"code":2349,"next":[{"messageText":"Type 'String' has no call signatures.","category":1,"code":2757}]},"relatedInformation":[{"start":32314,"length":2,"messageText":"Are you missing a semicolon?","category":1,"code":2734}]}]],[2301,[{"start":594,"length":19,"code":2339,"category":1,"messageText":"Property 'pending_unscheduled' does not exist on type '{ keyword: string; diagnosis_type: string; syndrome_type: string; assistant_id: string; start_time: string; end_time: string; diagnosis_confirmed: \"\" | \"0\" | \"1\"; appointment_date: string; has_appointment: \"\" | ... 1 more ... | \"1\"; pending_assign: \"\" | \"1\"; }'."},{"start":1198,"length":32,"code":2339,"category":1,"messageText":"Property 'handlePendingUnscheduledTabClick' does not exist on type 'CreateComponentPublicInstanceWithMixins<ToResolvedProps<{}, {}>, { hasPermission: (perms: string[]) => boolean; Loading: DefineComponent<{}, void, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, ... 12 more ..., any>; ... 96 more ...; handleDeleteRecord: (id: number) => Promise<...>; }, ... 23 more ..., {}>'."},{"start":1134,"length":19,"code":2339,"category":1,"messageText":"Property 'pending_unscheduled' does not exist on type '{ keyword: string; diagnosis_type: string; syndrome_type: string; assistant_id: string; start_time: string; end_time: string; diagnosis_confirmed: \"\" | \"0\" | \"1\"; appointment_date: string; has_appointment: \"\" | ... 1 more ... | \"1\"; pending_assign: \"\" | \"1\"; }'."},{"start":1316,"length":23,"code":2339,"category":1,"messageText":"Property 'pendingUnscheduledCount' does not exist on type 'CreateComponentPublicInstanceWithMixins<ToResolvedProps<{}, {}>, { hasPermission: (perms: string[]) => boolean; Loading: DefineComponent<{}, void, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, ... 12 more ..., any>; ... 96 more ...; handleDeleteRecord: (id: number) => Promise<...>; }, ... 23 more ..., {}>'."},{"start":1358,"length":23,"code":2339,"category":1,"messageText":"Property 'pendingUnscheduledCount' does not exist on type 'CreateComponentPublicInstanceWithMixins<ToResolvedProps<{}, {}>, { hasPermission: (perms: string[]) => boolean; Loading: DefineComponent<{}, void, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, ... 12 more ..., any>; ... 96 more ...; handleDeleteRecord: (id: number) => Promise<...>; }, ... 23 more ..., {}>'."}]],[2311,[{"start":24155,"length":1,"messageText":"Parameter 'd' implicitly has an 'any' type.","category":1,"code":7006}]]],"affectedFilesPendingEmit":[1534,1551,1542,1552,1553,1430,1554,1536,1543,1423,1421,1427,1544,1545,1443,1546,1547,1555,1556,1557,1558,1559,1548,1549,1560,1561,1562,1563,150,1564,1565,1550,1429,1566,131,1538,1951,1952,1972,1537,1973,1974,1975,1976,2065,2066,2067,2068,2070,2071,2069,2072,2074,2075,2073,2078,2076,2079,2077,2059,2061,2063,2064,2062,1444,2080,2081,2082,2058,1950,1520,2083,2098,128,138,111,132,129,130,2099,1414,147,2060,143,2101,2102,1540,2114,2118,2121,2123,2125,2126,1415,144,145,146,1107,148,149,1106,1108,141,142,1114,1109,1111,1112,1113,1115,1541,1539,2124,2127,1528,1527,2122,1535,134,140,137,136,135,1953,1954,2128,1445,1521,2129,1105,2130,1439,1956,1431,1531,1529,1533,139,1955,1110,133,1532,1418,1419,1417,1416,2131,2132,2133,2134,2135,2136,2137,2138,2139,2145,2143,2142,2141,2144,2140,2147,2146,2148,2149,2150,2151,2152,2153,2154,2155,2156,2157,2158,2159,2160,2161,2162,2163,2171,2167,2172,2165,1425,2173,2166,2168,2169,2175,2176,2177,2174,2179,2180,2181,2178,2183,2184,2185,2182,1424,2187,2188,2189,2186,2191,2192,2193,2190,2195,2196,2197,2194,2199,2200,2201,2198,2203,2204,2205,2202,2207,2208,2206,2210,2211,2212,2209,2214,2215,2216,2213,2218,2219,2220,2217,2221,2164,1426,2223,2222,2224,2170,2226,2229,2227,2228,2225,2230,2231,1422,2232,2233,1118,1117,1116,1428,2234,2235,2240,2241,2236,2238,2237,2239,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274,2275,2276,2277,2278,2279,2282,2284,2283,2285,1525,1442,1441,2300,1434,1438,1437,1435,1436,1440,1523,1522,2301,1526,2302,2303,2304,2305,2306,2307,2308,2309,2310,1420,2311,2504],"emitSignatures":[111,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1520,1521,1522,1523,1525,1526,1527,1528,1529,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1950,1951,1952,1953,1954,1955,1956,1972,1973,1974,1975,1976,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2078,2079,2080,2081,2082,2083,2098,2099,2101,2102,2114,2118,2121,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2139,2140,2141,2142,2143,2144,2145,2146,2147,2148,2149,2150,2151,2152,2153,2154,2155,2156,2157,2158,2159,2160,2161,2162,2163,2164,2165,2166,2167,2168,2169,2170,2171,2172,2173,2174,2175,2176,2177,2178,2179,2180,2181,2182,2183,2184,2185,2186,2187,2188,2189,2190,2191,2192,2193,2194,2195,2196,2197,2198,2199,2200,2201,2202,2203,2204,2205,2206,2207,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274,2275,2276,2277,2278,2279,2282,2283,2284,2285,2300,2301,2302,2303,2304,2305,2306,2307,2308,2309,2310,2311,2504],"version":"5.9.3"} \ No newline at end of file +{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/typescript/lib/lib.es2024.d.ts","./node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.dom.asynciterable.d.ts","./node_modules/typescript/lib/lib.webworker.importscripts.d.ts","./node_modules/typescript/lib/lib.scripthost.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/typescript/lib/lib.es2023.intl.d.ts","./node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2024.collection.d.ts","./node_modules/typescript/lib/lib.es2024.object.d.ts","./node_modules/typescript/lib/lib.es2024.promise.d.ts","./node_modules/typescript/lib/lib.es2024.regexp.d.ts","./node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2024.string.d.ts","./node_modules/typescript/lib/lib.esnext.array.d.ts","./node_modules/typescript/lib/lib.esnext.collection.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.promise.d.ts","./node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/typescript/lib/lib.esnext.iterator.d.ts","./node_modules/typescript/lib/lib.esnext.float16.d.ts","./node_modules/typescript/lib/lib.esnext.error.d.ts","./node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/typescript/lib/lib.esnext.full.d.ts","./node_modules/vite/types/hmrpayload.d.ts","./node_modules/vite/types/customevent.d.ts","./node_modules/vite/types/hot.d.ts","./node_modules/vite/types/importglob.d.ts","./node_modules/vite/types/importmeta.d.ts","./node_modules/vite/client.d.ts","./global.d.ts","./node_modules/@vue/shared/dist/shared.d.ts","./node_modules/@babel/types/lib/index.d.ts","./node_modules/@babel/parser/typings/babel-parser.d.ts","./node_modules/@vue/compiler-core/dist/compiler-core.d.ts","./node_modules/@vue/compiler-dom/dist/compiler-dom.d.ts","./node_modules/@vue/reactivity/dist/reactivity.d.ts","./node_modules/@vue/runtime-core/dist/runtime-core.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@vue/runtime-dom/dist/runtime-dom.d.ts","./node_modules/vue/dist/vue.d.mts","./node_modules/vue/jsx-runtime/index.d.ts","./node_modules/.vue-global-types/vue_3.5_0_0_0.d.ts","./node_modules/vue-router/dist/router-cwonjprp.d.mts","./node_modules/vue-router/dist/vue-router.d.mts","./node_modules/@vueuse/shared/index.d.mts","./node_modules/@vueuse/core/index.d.mts","./node_modules/element-plus/es/locale/lang/zh-cn.d.ts","./src/enums/appenums.ts","./node_modules/vue-demi/lib/index.d.ts","./node_modules/pinia/dist/pinia.d.ts","./node_modules/axios/index.d.ts","./node_modules/@types/lodash/common/common.d.ts","./node_modules/@types/lodash/common/array.d.ts","./node_modules/@types/lodash/common/collection.d.ts","./node_modules/@types/lodash/common/date.d.ts","./node_modules/@types/lodash/common/function.d.ts","./node_modules/@types/lodash/common/lang.d.ts","./node_modules/@types/lodash/common/math.d.ts","./node_modules/@types/lodash/common/number.d.ts","./node_modules/@types/lodash/common/object.d.ts","./node_modules/@types/lodash/common/seq.d.ts","./node_modules/@types/lodash/common/string.d.ts","./node_modules/@types/lodash/common/util.d.ts","./node_modules/@types/lodash/index.d.ts","./src/config/index.ts","./src/enums/pageenum.ts","./src/enums/requestenums.ts","./src/api/user.ts","./src/enums/cacheenums.ts","./src/utils/validate.ts","./src/stores/modules/multipletabs.ts","./src/utils/cache.ts","./src/utils/auth.ts","./src/stores/modules/user.ts","./src/config/setting.ts","./src/utils/theme.ts","./src/stores/modules/setting.ts","./src/layout/default/components/setting/drawer.vue","./src/layout/default/components/setting/index.vue","./src/hooks/usewatchroute.ts","./src/layout/default/components/header/breadcrumb.vue","./src/layout/default/components/header/fold.vue","./src/layout/default/components/header/full-screen.vue","./src/hooks/usemultipletabs.ts","./src/layout/default/components/header/multiple-tabs.vue","./src/layout/default/components/header/refresh.vue","./src/api/setting/system.ts","./node_modules/element-plus/es/utils/dom/aria.d.ts","./node_modules/element-plus/es/utils/dom/event.d.ts","./node_modules/element-plus/es/utils/dom/position.d.ts","./node_modules/element-plus/es/utils/dom/scroll.d.ts","./node_modules/element-plus/es/utils/dom/style.d.ts","./node_modules/element-plus/es/utils/dom/element.d.ts","./node_modules/element-plus/es/utils/dom/index.d.ts","./node_modules/element-plus/es/utils/vue/global-node.d.ts","./node_modules/element-plus/es/utils/vue/icon.d.ts","./node_modules/element-plus/es/utils/vue/typescript.d.ts","./node_modules/element-plus/es/utils/vue/install.d.ts","./node_modules/element-plus/es/utils/vue/props/util.d.ts","./node_modules/element-plus/es/utils/vue/props/runtime.d.ts","./node_modules/element-plus/es/utils/vue/props/types.d.ts","./node_modules/element-plus/es/utils/vue/props/index.d.ts","./node_modules/element-plus/es/utils/vue/refs.d.ts","./node_modules/element-plus/es/constants/aria.d.ts","./node_modules/element-plus/es/constants/date.d.ts","./node_modules/element-plus/es/constants/event.d.ts","./node_modules/element-plus/es/constants/key.d.ts","./node_modules/element-plus/es/constants/size.d.ts","./node_modules/element-plus/es/constants/column-alignment.d.ts","./node_modules/element-plus/es/constants/form.d.ts","./node_modules/element-plus/es/constants/index.d.ts","./node_modules/element-plus/es/utils/vue/size.d.ts","./node_modules/element-plus/es/utils/vue/validator.d.ts","./node_modules/element-plus/es/utils/vue/vnode.d.ts","./node_modules/element-plus/es/utils/vue/index.d.ts","./node_modules/@types/lodash-es/add.d.ts","./node_modules/@types/lodash-es/after.d.ts","./node_modules/@types/lodash-es/ary.d.ts","./node_modules/@types/lodash-es/assign.d.ts","./node_modules/@types/lodash-es/assignin.d.ts","./node_modules/@types/lodash-es/assigninwith.d.ts","./node_modules/@types/lodash-es/assignwith.d.ts","./node_modules/@types/lodash-es/at.d.ts","./node_modules/@types/lodash-es/attempt.d.ts","./node_modules/@types/lodash-es/before.d.ts","./node_modules/@types/lodash-es/bind.d.ts","./node_modules/@types/lodash-es/bindall.d.ts","./node_modules/@types/lodash-es/bindkey.d.ts","./node_modules/@types/lodash-es/camelcase.d.ts","./node_modules/@types/lodash-es/capitalize.d.ts","./node_modules/@types/lodash-es/castarray.d.ts","./node_modules/@types/lodash-es/ceil.d.ts","./node_modules/@types/lodash-es/chain.d.ts","./node_modules/@types/lodash-es/chunk.d.ts","./node_modules/@types/lodash-es/clamp.d.ts","./node_modules/@types/lodash-es/clone.d.ts","./node_modules/@types/lodash-es/clonedeep.d.ts","./node_modules/@types/lodash-es/clonedeepwith.d.ts","./node_modules/@types/lodash-es/clonewith.d.ts","./node_modules/@types/lodash-es/compact.d.ts","./node_modules/@types/lodash-es/concat.d.ts","./node_modules/@types/lodash-es/cond.d.ts","./node_modules/@types/lodash-es/conforms.d.ts","./node_modules/@types/lodash-es/conformsto.d.ts","./node_modules/@types/lodash-es/constant.d.ts","./node_modules/@types/lodash-es/countby.d.ts","./node_modules/@types/lodash-es/create.d.ts","./node_modules/@types/lodash-es/curry.d.ts","./node_modules/@types/lodash-es/curryright.d.ts","./node_modules/@types/lodash-es/debounce.d.ts","./node_modules/@types/lodash-es/deburr.d.ts","./node_modules/@types/lodash-es/defaults.d.ts","./node_modules/@types/lodash-es/defaultsdeep.d.ts","./node_modules/@types/lodash-es/defaultto.d.ts","./node_modules/@types/lodash-es/defer.d.ts","./node_modules/@types/lodash-es/delay.d.ts","./node_modules/@types/lodash-es/difference.d.ts","./node_modules/@types/lodash-es/differenceby.d.ts","./node_modules/@types/lodash-es/differencewith.d.ts","./node_modules/@types/lodash-es/divide.d.ts","./node_modules/@types/lodash-es/drop.d.ts","./node_modules/@types/lodash-es/dropright.d.ts","./node_modules/@types/lodash-es/droprightwhile.d.ts","./node_modules/@types/lodash-es/dropwhile.d.ts","./node_modules/@types/lodash-es/each.d.ts","./node_modules/@types/lodash-es/eachright.d.ts","./node_modules/@types/lodash-es/endswith.d.ts","./node_modules/@types/lodash-es/entries.d.ts","./node_modules/@types/lodash-es/entriesin.d.ts","./node_modules/@types/lodash-es/eq.d.ts","./node_modules/@types/lodash-es/escape.d.ts","./node_modules/@types/lodash-es/escaperegexp.d.ts","./node_modules/@types/lodash-es/every.d.ts","./node_modules/@types/lodash-es/extend.d.ts","./node_modules/@types/lodash-es/extendwith.d.ts","./node_modules/@types/lodash-es/fill.d.ts","./node_modules/@types/lodash-es/filter.d.ts","./node_modules/@types/lodash-es/find.d.ts","./node_modules/@types/lodash-es/findindex.d.ts","./node_modules/@types/lodash-es/findkey.d.ts","./node_modules/@types/lodash-es/findlast.d.ts","./node_modules/@types/lodash-es/findlastindex.d.ts","./node_modules/@types/lodash-es/findlastkey.d.ts","./node_modules/@types/lodash-es/first.d.ts","./node_modules/@types/lodash-es/flatmap.d.ts","./node_modules/@types/lodash-es/flatmapdeep.d.ts","./node_modules/@types/lodash-es/flatmapdepth.d.ts","./node_modules/@types/lodash-es/flatten.d.ts","./node_modules/@types/lodash-es/flattendeep.d.ts","./node_modules/@types/lodash-es/flattendepth.d.ts","./node_modules/@types/lodash-es/flip.d.ts","./node_modules/@types/lodash-es/floor.d.ts","./node_modules/@types/lodash-es/flow.d.ts","./node_modules/@types/lodash-es/flowright.d.ts","./node_modules/@types/lodash-es/foreach.d.ts","./node_modules/@types/lodash-es/foreachright.d.ts","./node_modules/@types/lodash-es/forin.d.ts","./node_modules/@types/lodash-es/forinright.d.ts","./node_modules/@types/lodash-es/forown.d.ts","./node_modules/@types/lodash-es/forownright.d.ts","./node_modules/@types/lodash-es/frompairs.d.ts","./node_modules/@types/lodash-es/functions.d.ts","./node_modules/@types/lodash-es/functionsin.d.ts","./node_modules/@types/lodash-es/get.d.ts","./node_modules/@types/lodash-es/groupby.d.ts","./node_modules/@types/lodash-es/gt.d.ts","./node_modules/@types/lodash-es/gte.d.ts","./node_modules/@types/lodash-es/has.d.ts","./node_modules/@types/lodash-es/hasin.d.ts","./node_modules/@types/lodash-es/head.d.ts","./node_modules/@types/lodash-es/identity.d.ts","./node_modules/@types/lodash-es/includes.d.ts","./node_modules/@types/lodash-es/indexof.d.ts","./node_modules/@types/lodash-es/initial.d.ts","./node_modules/@types/lodash-es/inrange.d.ts","./node_modules/@types/lodash-es/intersection.d.ts","./node_modules/@types/lodash-es/intersectionby.d.ts","./node_modules/@types/lodash-es/intersectionwith.d.ts","./node_modules/@types/lodash-es/invert.d.ts","./node_modules/@types/lodash-es/invertby.d.ts","./node_modules/@types/lodash-es/invoke.d.ts","./node_modules/@types/lodash-es/invokemap.d.ts","./node_modules/@types/lodash-es/isarguments.d.ts","./node_modules/@types/lodash-es/isarray.d.ts","./node_modules/@types/lodash-es/isarraybuffer.d.ts","./node_modules/@types/lodash-es/isarraylike.d.ts","./node_modules/@types/lodash-es/isarraylikeobject.d.ts","./node_modules/@types/lodash-es/isboolean.d.ts","./node_modules/@types/lodash-es/isbuffer.d.ts","./node_modules/@types/lodash-es/isdate.d.ts","./node_modules/@types/lodash-es/iselement.d.ts","./node_modules/@types/lodash-es/isempty.d.ts","./node_modules/@types/lodash-es/isequal.d.ts","./node_modules/@types/lodash-es/isequalwith.d.ts","./node_modules/@types/lodash-es/iserror.d.ts","./node_modules/@types/lodash-es/isfinite.d.ts","./node_modules/@types/lodash-es/isfunction.d.ts","./node_modules/@types/lodash-es/isinteger.d.ts","./node_modules/@types/lodash-es/islength.d.ts","./node_modules/@types/lodash-es/ismap.d.ts","./node_modules/@types/lodash-es/ismatch.d.ts","./node_modules/@types/lodash-es/ismatchwith.d.ts","./node_modules/@types/lodash-es/isnan.d.ts","./node_modules/@types/lodash-es/isnative.d.ts","./node_modules/@types/lodash-es/isnil.d.ts","./node_modules/@types/lodash-es/isnull.d.ts","./node_modules/@types/lodash-es/isnumber.d.ts","./node_modules/@types/lodash-es/isobject.d.ts","./node_modules/@types/lodash-es/isobjectlike.d.ts","./node_modules/@types/lodash-es/isplainobject.d.ts","./node_modules/@types/lodash-es/isregexp.d.ts","./node_modules/@types/lodash-es/issafeinteger.d.ts","./node_modules/@types/lodash-es/isset.d.ts","./node_modules/@types/lodash-es/isstring.d.ts","./node_modules/@types/lodash-es/issymbol.d.ts","./node_modules/@types/lodash-es/istypedarray.d.ts","./node_modules/@types/lodash-es/isundefined.d.ts","./node_modules/@types/lodash-es/isweakmap.d.ts","./node_modules/@types/lodash-es/isweakset.d.ts","./node_modules/@types/lodash-es/iteratee.d.ts","./node_modules/@types/lodash-es/join.d.ts","./node_modules/@types/lodash-es/kebabcase.d.ts","./node_modules/@types/lodash-es/keyby.d.ts","./node_modules/@types/lodash-es/keys.d.ts","./node_modules/@types/lodash-es/keysin.d.ts","./node_modules/@types/lodash-es/last.d.ts","./node_modules/@types/lodash-es/lastindexof.d.ts","./node_modules/@types/lodash-es/lowercase.d.ts","./node_modules/@types/lodash-es/lowerfirst.d.ts","./node_modules/@types/lodash-es/lt.d.ts","./node_modules/@types/lodash-es/lte.d.ts","./node_modules/@types/lodash-es/map.d.ts","./node_modules/@types/lodash-es/mapkeys.d.ts","./node_modules/@types/lodash-es/mapvalues.d.ts","./node_modules/@types/lodash-es/matches.d.ts","./node_modules/@types/lodash-es/matchesproperty.d.ts","./node_modules/@types/lodash-es/max.d.ts","./node_modules/@types/lodash-es/maxby.d.ts","./node_modules/@types/lodash-es/mean.d.ts","./node_modules/@types/lodash-es/meanby.d.ts","./node_modules/@types/lodash-es/memoize.d.ts","./node_modules/@types/lodash-es/merge.d.ts","./node_modules/@types/lodash-es/mergewith.d.ts","./node_modules/@types/lodash-es/method.d.ts","./node_modules/@types/lodash-es/methodof.d.ts","./node_modules/@types/lodash-es/min.d.ts","./node_modules/@types/lodash-es/minby.d.ts","./node_modules/@types/lodash-es/mixin.d.ts","./node_modules/@types/lodash-es/multiply.d.ts","./node_modules/@types/lodash-es/negate.d.ts","./node_modules/@types/lodash-es/noop.d.ts","./node_modules/@types/lodash-es/now.d.ts","./node_modules/@types/lodash-es/nth.d.ts","./node_modules/@types/lodash-es/ntharg.d.ts","./node_modules/@types/lodash-es/omit.d.ts","./node_modules/@types/lodash-es/omitby.d.ts","./node_modules/@types/lodash-es/once.d.ts","./node_modules/@types/lodash-es/orderby.d.ts","./node_modules/@types/lodash-es/over.d.ts","./node_modules/@types/lodash-es/overargs.d.ts","./node_modules/@types/lodash-es/overevery.d.ts","./node_modules/@types/lodash-es/oversome.d.ts","./node_modules/@types/lodash-es/pad.d.ts","./node_modules/@types/lodash-es/padend.d.ts","./node_modules/@types/lodash-es/padstart.d.ts","./node_modules/@types/lodash-es/parseint.d.ts","./node_modules/@types/lodash-es/partial.d.ts","./node_modules/@types/lodash-es/partialright.d.ts","./node_modules/@types/lodash-es/partition.d.ts","./node_modules/@types/lodash-es/pick.d.ts","./node_modules/@types/lodash-es/pickby.d.ts","./node_modules/@types/lodash-es/property.d.ts","./node_modules/@types/lodash-es/propertyof.d.ts","./node_modules/@types/lodash-es/pull.d.ts","./node_modules/@types/lodash-es/pullall.d.ts","./node_modules/@types/lodash-es/pullallby.d.ts","./node_modules/@types/lodash-es/pullallwith.d.ts","./node_modules/@types/lodash-es/pullat.d.ts","./node_modules/@types/lodash-es/random.d.ts","./node_modules/@types/lodash-es/range.d.ts","./node_modules/@types/lodash-es/rangeright.d.ts","./node_modules/@types/lodash-es/rearg.d.ts","./node_modules/@types/lodash-es/reduce.d.ts","./node_modules/@types/lodash-es/reduceright.d.ts","./node_modules/@types/lodash-es/reject.d.ts","./node_modules/@types/lodash-es/remove.d.ts","./node_modules/@types/lodash-es/repeat.d.ts","./node_modules/@types/lodash-es/replace.d.ts","./node_modules/@types/lodash-es/rest.d.ts","./node_modules/@types/lodash-es/result.d.ts","./node_modules/@types/lodash-es/reverse.d.ts","./node_modules/@types/lodash-es/round.d.ts","./node_modules/@types/lodash-es/sample.d.ts","./node_modules/@types/lodash-es/samplesize.d.ts","./node_modules/@types/lodash-es/set.d.ts","./node_modules/@types/lodash-es/setwith.d.ts","./node_modules/@types/lodash-es/shuffle.d.ts","./node_modules/@types/lodash-es/size.d.ts","./node_modules/@types/lodash-es/slice.d.ts","./node_modules/@types/lodash-es/snakecase.d.ts","./node_modules/@types/lodash-es/some.d.ts","./node_modules/@types/lodash-es/sortby.d.ts","./node_modules/@types/lodash-es/sortedindex.d.ts","./node_modules/@types/lodash-es/sortedindexby.d.ts","./node_modules/@types/lodash-es/sortedindexof.d.ts","./node_modules/@types/lodash-es/sortedlastindex.d.ts","./node_modules/@types/lodash-es/sortedlastindexby.d.ts","./node_modules/@types/lodash-es/sortedlastindexof.d.ts","./node_modules/@types/lodash-es/sorteduniq.d.ts","./node_modules/@types/lodash-es/sorteduniqby.d.ts","./node_modules/@types/lodash-es/split.d.ts","./node_modules/@types/lodash-es/spread.d.ts","./node_modules/@types/lodash-es/startcase.d.ts","./node_modules/@types/lodash-es/startswith.d.ts","./node_modules/@types/lodash-es/stubarray.d.ts","./node_modules/@types/lodash-es/stubfalse.d.ts","./node_modules/@types/lodash-es/stubobject.d.ts","./node_modules/@types/lodash-es/stubstring.d.ts","./node_modules/@types/lodash-es/stubtrue.d.ts","./node_modules/@types/lodash-es/subtract.d.ts","./node_modules/@types/lodash-es/sum.d.ts","./node_modules/@types/lodash-es/sumby.d.ts","./node_modules/@types/lodash-es/tail.d.ts","./node_modules/@types/lodash-es/take.d.ts","./node_modules/@types/lodash-es/takeright.d.ts","./node_modules/@types/lodash-es/takerightwhile.d.ts","./node_modules/@types/lodash-es/takewhile.d.ts","./node_modules/@types/lodash-es/tap.d.ts","./node_modules/@types/lodash-es/template.d.ts","./node_modules/@types/lodash-es/templatesettings.d.ts","./node_modules/@types/lodash-es/throttle.d.ts","./node_modules/@types/lodash-es/thru.d.ts","./node_modules/@types/lodash-es/times.d.ts","./node_modules/@types/lodash-es/toarray.d.ts","./node_modules/@types/lodash-es/tofinite.d.ts","./node_modules/@types/lodash-es/tointeger.d.ts","./node_modules/@types/lodash-es/tolength.d.ts","./node_modules/@types/lodash-es/tolower.d.ts","./node_modules/@types/lodash-es/tonumber.d.ts","./node_modules/@types/lodash-es/topairs.d.ts","./node_modules/@types/lodash-es/topairsin.d.ts","./node_modules/@types/lodash-es/topath.d.ts","./node_modules/@types/lodash-es/toplainobject.d.ts","./node_modules/@types/lodash-es/tosafeinteger.d.ts","./node_modules/@types/lodash-es/tostring.d.ts","./node_modules/@types/lodash-es/toupper.d.ts","./node_modules/@types/lodash-es/transform.d.ts","./node_modules/@types/lodash-es/trim.d.ts","./node_modules/@types/lodash-es/trimend.d.ts","./node_modules/@types/lodash-es/trimstart.d.ts","./node_modules/@types/lodash-es/truncate.d.ts","./node_modules/@types/lodash-es/unary.d.ts","./node_modules/@types/lodash-es/unescape.d.ts","./node_modules/@types/lodash-es/union.d.ts","./node_modules/@types/lodash-es/unionby.d.ts","./node_modules/@types/lodash-es/unionwith.d.ts","./node_modules/@types/lodash-es/uniq.d.ts","./node_modules/@types/lodash-es/uniqby.d.ts","./node_modules/@types/lodash-es/uniqueid.d.ts","./node_modules/@types/lodash-es/uniqwith.d.ts","./node_modules/@types/lodash-es/unset.d.ts","./node_modules/@types/lodash-es/unzip.d.ts","./node_modules/@types/lodash-es/unzipwith.d.ts","./node_modules/@types/lodash-es/update.d.ts","./node_modules/@types/lodash-es/updatewith.d.ts","./node_modules/@types/lodash-es/uppercase.d.ts","./node_modules/@types/lodash-es/upperfirst.d.ts","./node_modules/@types/lodash-es/values.d.ts","./node_modules/@types/lodash-es/valuesin.d.ts","./node_modules/@types/lodash-es/without.d.ts","./node_modules/@types/lodash-es/words.d.ts","./node_modules/@types/lodash-es/wrap.d.ts","./node_modules/@types/lodash-es/xor.d.ts","./node_modules/@types/lodash-es/xorby.d.ts","./node_modules/@types/lodash-es/xorwith.d.ts","./node_modules/@types/lodash-es/zip.d.ts","./node_modules/@types/lodash-es/zipobject.d.ts","./node_modules/@types/lodash-es/zipobjectdeep.d.ts","./node_modules/@types/lodash-es/zipwith.d.ts","./node_modules/@types/lodash-es/index.d.ts","./node_modules/lodash-unified/type.d.ts","./node_modules/element-plus/es/utils/arrays.d.ts","./node_modules/element-plus/node_modules/@vueuse/shared/index.d.mts","./node_modules/element-plus/node_modules/@vueuse/core/index.d.mts","./node_modules/element-plus/es/utils/browser.d.ts","./node_modules/element-plus/es/utils/error.d.ts","./node_modules/element-plus/es/utils/functions.d.ts","./node_modules/element-plus/es/utils/i18n.d.ts","./node_modules/element-plus/es/utils/objects.d.ts","./node_modules/element-plus/es/utils/raf.d.ts","./node_modules/element-plus/es/utils/rand.d.ts","./node_modules/element-plus/es/utils/strings.d.ts","./node_modules/element-plus/es/utils/types.d.ts","./node_modules/element-plus/es/utils/typescript.d.ts","./node_modules/element-plus/es/utils/throttlebyraf.d.ts","./node_modules/element-plus/es/utils/easings.d.ts","./node_modules/element-plus/es/utils/index.d.ts","./node_modules/element-plus/es/components/affix/src/affix.d.ts","./node_modules/element-plus/es/components/affix/src/affix.vue.d.ts","./node_modules/element-plus/es/components/affix/index.d.ts","./node_modules/element-plus/es/components/alert/src/alert.d.ts","./node_modules/element-plus/es/components/alert/src/alert.vue.d.ts","./node_modules/element-plus/es/components/alert/src/instance.d.ts","./node_modules/element-plus/es/components/alert/index.d.ts","./node_modules/@popperjs/core/lib/enums.d.ts","./node_modules/@popperjs/core/lib/modifiers/popperoffsets.d.ts","./node_modules/@popperjs/core/lib/modifiers/flip.d.ts","./node_modules/@popperjs/core/lib/modifiers/hide.d.ts","./node_modules/@popperjs/core/lib/modifiers/offset.d.ts","./node_modules/@popperjs/core/lib/modifiers/eventlisteners.d.ts","./node_modules/@popperjs/core/lib/modifiers/computestyles.d.ts","./node_modules/@popperjs/core/lib/modifiers/arrow.d.ts","./node_modules/@popperjs/core/lib/modifiers/preventoverflow.d.ts","./node_modules/@popperjs/core/lib/modifiers/applystyles.d.ts","./node_modules/@popperjs/core/lib/types.d.ts","./node_modules/@popperjs/core/lib/modifiers/index.d.ts","./node_modules/@popperjs/core/lib/utils/detectoverflow.d.ts","./node_modules/@popperjs/core/lib/createpopper.d.ts","./node_modules/@popperjs/core/lib/popper-lite.d.ts","./node_modules/@popperjs/core/lib/popper.d.ts","./node_modules/@popperjs/core/lib/index.d.ts","./node_modules/@popperjs/core/index.d.ts","./node_modules/element-plus/es/components/popper/src/constants.d.ts","./node_modules/element-plus/es/components/popper/src/popper.d.ts","./node_modules/element-plus/es/components/popper/src/popper.vue.d.ts","./node_modules/element-plus/es/components/popper/src/arrow.vue.d.ts","./node_modules/element-plus/es/components/popper/src/trigger.d.ts","./node_modules/element-plus/es/components/popper/src/trigger.vue.d.ts","./node_modules/element-plus/es/components/popper/src/arrow.d.ts","./node_modules/element-plus/es/components/popper/src/content.d.ts","./node_modules/element-plus/es/components/popper/src/content.vue.d.ts","./node_modules/element-plus/es/components/popper/index.d.ts","./node_modules/element-plus/es/components/input/src/input.d.ts","./node_modules/element-plus/es/components/input/src/input.vue.d.ts","./node_modules/element-plus/es/components/input/src/instance.d.ts","./node_modules/element-plus/es/components/input/index.d.ts","./node_modules/element-plus/es/hooks/use-attrs/index.d.ts","./node_modules/element-plus/es/hooks/use-calc-input-width/index.d.ts","./node_modules/element-plus/es/hooks/use-deprecated/index.d.ts","./node_modules/element-plus/es/hooks/use-draggable/index.d.ts","./node_modules/element-plus/es/hooks/use-focus/index.d.ts","./node_modules/element-plus/es/locale/lang/en.d.ts","./node_modules/element-plus/es/locale/lang/af.d.ts","./node_modules/element-plus/es/locale/lang/ar-eg.d.ts","./node_modules/element-plus/es/locale/lang/ar.d.ts","./node_modules/element-plus/es/locale/lang/az.d.ts","./node_modules/element-plus/es/locale/lang/bg.d.ts","./node_modules/element-plus/es/locale/lang/bn.d.ts","./node_modules/element-plus/es/locale/lang/ca.d.ts","./node_modules/element-plus/es/locale/lang/ckb.d.ts","./node_modules/element-plus/es/locale/lang/cs.d.ts","./node_modules/element-plus/es/locale/lang/da.d.ts","./node_modules/element-plus/es/locale/lang/de.d.ts","./node_modules/element-plus/es/locale/lang/el.d.ts","./node_modules/element-plus/es/locale/lang/eo.d.ts","./node_modules/element-plus/es/locale/lang/es.d.ts","./node_modules/element-plus/es/locale/lang/et.d.ts","./node_modules/element-plus/es/locale/lang/eu.d.ts","./node_modules/element-plus/es/locale/lang/fa.d.ts","./node_modules/element-plus/es/locale/lang/fi.d.ts","./node_modules/element-plus/es/locale/lang/fr.d.ts","./node_modules/element-plus/es/locale/lang/he.d.ts","./node_modules/element-plus/es/locale/lang/hi.d.ts","./node_modules/element-plus/es/locale/lang/hr.d.ts","./node_modules/element-plus/es/locale/lang/hu.d.ts","./node_modules/element-plus/es/locale/lang/hy-am.d.ts","./node_modules/element-plus/es/locale/lang/id.d.ts","./node_modules/element-plus/es/locale/lang/it.d.ts","./node_modules/element-plus/es/locale/lang/ja.d.ts","./node_modules/element-plus/es/locale/lang/kk.d.ts","./node_modules/element-plus/es/locale/lang/km.d.ts","./node_modules/element-plus/es/locale/lang/ko.d.ts","./node_modules/element-plus/es/locale/lang/ku.d.ts","./node_modules/element-plus/es/locale/lang/ky.d.ts","./node_modules/element-plus/es/locale/lang/lo.d.ts","./node_modules/element-plus/es/locale/lang/lt.d.ts","./node_modules/element-plus/es/locale/lang/lv.d.ts","./node_modules/element-plus/es/locale/lang/mg.d.ts","./node_modules/element-plus/es/locale/lang/mn.d.ts","./node_modules/element-plus/es/locale/lang/ms.d.ts","./node_modules/element-plus/es/locale/lang/my.d.ts","./node_modules/element-plus/es/locale/lang/nb-no.d.ts","./node_modules/element-plus/es/locale/lang/nl.d.ts","./node_modules/element-plus/es/locale/lang/no.d.ts","./node_modules/element-plus/es/locale/lang/pa.d.ts","./node_modules/element-plus/es/locale/lang/pl.d.ts","./node_modules/element-plus/es/locale/lang/pt-br.d.ts","./node_modules/element-plus/es/locale/lang/pt.d.ts","./node_modules/element-plus/es/locale/lang/ro.d.ts","./node_modules/element-plus/es/locale/lang/ru.d.ts","./node_modules/element-plus/es/locale/lang/sk.d.ts","./node_modules/element-plus/es/locale/lang/sl.d.ts","./node_modules/element-plus/es/locale/lang/sr.d.ts","./node_modules/element-plus/es/locale/lang/sv.d.ts","./node_modules/element-plus/es/locale/lang/sw.d.ts","./node_modules/element-plus/es/locale/lang/ta.d.ts","./node_modules/element-plus/es/locale/lang/te.d.ts","./node_modules/element-plus/es/locale/lang/th.d.ts","./node_modules/element-plus/es/locale/lang/tk.d.ts","./node_modules/element-plus/es/locale/lang/tr.d.ts","./node_modules/element-plus/es/locale/lang/ug-cn.d.ts","./node_modules/element-plus/es/locale/lang/uk.d.ts","./node_modules/element-plus/es/locale/lang/uz-uz.d.ts","./node_modules/element-plus/es/locale/lang/vi.d.ts","./node_modules/element-plus/es/locale/lang/zh-tw.d.ts","./node_modules/element-plus/es/locale/lang/zh-hk.d.ts","./node_modules/element-plus/es/locale/lang/zh-mo.d.ts","./node_modules/element-plus/es/locale/index.d.ts","./node_modules/element-plus/es/hooks/use-locale/index.d.ts","./node_modules/element-plus/es/hooks/use-namespace/index.d.ts","./node_modules/element-plus/es/hooks/use-lockscreen/index.d.ts","./node_modules/element-plus/es/hooks/use-modal/index.d.ts","./node_modules/element-plus/es/hooks/use-model-toggle/index.d.ts","./node_modules/element-plus/es/hooks/use-prevent-global/index.d.ts","./node_modules/element-plus/es/hooks/use-prop/index.d.ts","./node_modules/element-plus/es/hooks/use-popper/index.d.ts","./node_modules/element-plus/es/hooks/use-same-target/index.d.ts","./node_modules/element-plus/es/hooks/use-teleport/index.d.ts","./node_modules/element-plus/es/hooks/use-throttle-render/index.d.ts","./node_modules/element-plus/es/hooks/use-timeout/index.d.ts","./node_modules/element-plus/es/hooks/use-transition-fallthrough/index.d.ts","./node_modules/element-plus/es/hooks/use-id/index.d.ts","./node_modules/element-plus/es/hooks/use-escape-keydown/index.d.ts","./node_modules/element-plus/es/hooks/use-popper-container/index.d.ts","./node_modules/element-plus/es/hooks/use-intermediate-render/index.d.ts","./node_modules/element-plus/es/hooks/use-delayed-toggle/index.d.ts","./node_modules/element-plus/es/hooks/use-forward-ref/index.d.ts","./node_modules/element-plus/es/hooks/use-z-index/index.d.ts","./node_modules/@floating-ui/utils/dist/floating-ui.utils.d.mts","./node_modules/@floating-ui/core/dist/floating-ui.core.d.mts","./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.d.mts","./node_modules/@floating-ui/dom/dist/floating-ui.dom.d.mts","./node_modules/element-plus/es/hooks/use-floating/index.d.ts","./node_modules/element-plus/es/hooks/use-cursor/index.d.ts","./node_modules/element-plus/es/hooks/use-ordered-children/index.d.ts","./node_modules/element-plus/es/hooks/use-size/index.d.ts","./node_modules/element-plus/es/hooks/use-focus-controller/index.d.ts","./node_modules/element-plus/es/hooks/use-composition/index.d.ts","./node_modules/element-plus/es/hooks/use-empty-values/index.d.ts","./node_modules/element-plus/es/hooks/use-aria/index.d.ts","./node_modules/element-plus/es/hooks/index.d.ts","./node_modules/element-plus/es/components/tooltip/src/content.vue.d.ts","./node_modules/element-plus/es/components/tooltip/src/content.d.ts","./node_modules/element-plus/es/components/tooltip/src/trigger.d.ts","./node_modules/element-plus/es/components/tooltip/src/tooltip.d.ts","./node_modules/element-plus/es/components/tooltip/src/tooltip.vue.d.ts","./node_modules/element-plus/es/components/tooltip/src/constants.d.ts","./node_modules/element-plus/es/components/tooltip/index.d.ts","./node_modules/element-plus/es/components/autocomplete/src/autocomplete.d.ts","./node_modules/element-plus/es/components/autocomplete/src/autocomplete.vue.d.ts","./node_modules/element-plus/es/components/autocomplete/index.d.ts","./node_modules/element-plus/es/components/avatar/src/avatar.d.ts","./node_modules/element-plus/es/components/avatar/src/avatar.vue.d.ts","./node_modules/element-plus/es/components/avatar/src/avatar-group.d.ts","./node_modules/element-plus/es/components/avatar/src/constants.d.ts","./node_modules/element-plus/es/components/avatar/src/avatar-group-props.d.ts","./node_modules/element-plus/es/components/avatar/src/instance.d.ts","./node_modules/element-plus/es/components/avatar/index.d.ts","./node_modules/element-plus/es/components/backtop/src/backtop.d.ts","./node_modules/element-plus/es/components/backtop/src/backtop.vue.d.ts","./node_modules/element-plus/es/components/backtop/src/instance.d.ts","./node_modules/element-plus/es/components/backtop/index.d.ts","./node_modules/element-plus/es/components/badge/src/badge.d.ts","./node_modules/element-plus/es/components/badge/src/badge.vue.d.ts","./node_modules/element-plus/es/components/badge/src/instance.d.ts","./node_modules/element-plus/es/components/badge/index.d.ts","./node_modules/element-plus/es/components/breadcrumb/src/breadcrumb.d.ts","./node_modules/element-plus/es/components/breadcrumb/src/breadcrumb.vue.d.ts","./node_modules/element-plus/es/components/breadcrumb/src/breadcrumb-item.d.ts","./node_modules/element-plus/es/components/breadcrumb/src/breadcrumb-item.vue.d.ts","./node_modules/element-plus/es/components/breadcrumb/src/constants.d.ts","./node_modules/element-plus/es/components/breadcrumb/src/instances.d.ts","./node_modules/element-plus/es/components/breadcrumb/index.d.ts","./node_modules/element-plus/es/components/button/src/button.d.ts","./node_modules/element-plus/es/components/button/src/button.vue.d.ts","./node_modules/element-plus/es/components/button/src/button-group.d.ts","./node_modules/element-plus/es/components/button/src/button-group.vue.d.ts","./node_modules/element-plus/es/components/button/src/constants.d.ts","./node_modules/element-plus/es/components/button/src/instance.d.ts","./node_modules/element-plus/es/components/button/index.d.ts","./node_modules/element-plus/es/components/calendar/src/calendar.d.ts","./node_modules/dayjs/locale/types.d.ts","./node_modules/dayjs/locale/index.d.ts","./node_modules/dayjs/index.d.ts","./node_modules/element-plus/es/components/calendar/src/calendar.vue.d.ts","./node_modules/element-plus/es/components/calendar/src/date-table.d.ts","./node_modules/element-plus/es/components/calendar/src/date-table.vue.d.ts","./node_modules/element-plus/es/components/calendar/src/instance.d.ts","./node_modules/element-plus/es/components/calendar/index.d.ts","./node_modules/element-plus/es/components/card/src/card.d.ts","./node_modules/element-plus/es/components/card/src/card.vue.d.ts","./node_modules/element-plus/es/components/card/src/instance.d.ts","./node_modules/element-plus/es/components/card/index.d.ts","./node_modules/element-plus/es/components/carousel/src/carousel.d.ts","./node_modules/element-plus/es/components/carousel/src/carousel.vue.d.ts","./node_modules/element-plus/es/components/carousel/src/carousel-item.d.ts","./node_modules/element-plus/es/components/carousel/src/carousel-item.vue.d.ts","./node_modules/element-plus/es/components/carousel/src/constants.d.ts","./node_modules/element-plus/es/components/carousel/src/instance.d.ts","./node_modules/element-plus/es/components/carousel/index.d.ts","./node_modules/element-plus/es/components/cascader-panel/src/types.d.ts","./node_modules/element-plus/es/components/cascader-panel/src/node.d.ts","./node_modules/element-plus/es/components/cascader-panel/src/menu.vue.d.ts","./node_modules/element-plus/es/components/cascader-panel/src/instance.d.ts","./node_modules/element-plus/es/components/cascader-panel/src/config.d.ts","./node_modules/element-plus/es/components/cascader-panel/src/index.vue.d.ts","./node_modules/element-plus/es/components/cascader-panel/index.d.ts","./node_modules/element-plus/es/components/tag/src/tag.d.ts","./node_modules/element-plus/es/components/tag/src/tag.vue.d.ts","./node_modules/element-plus/es/components/tag/index.d.ts","./node_modules/element-plus/es/components/cascader/src/cascader.d.ts","./node_modules/element-plus/es/components/cascader/src/cascader.vue.d.ts","./node_modules/element-plus/es/components/cascader/src/instances.d.ts","./node_modules/element-plus/es/components/cascader/index.d.ts","./node_modules/element-plus/es/components/check-tag/src/check-tag.d.ts","./node_modules/element-plus/es/components/check-tag/src/check-tag.vue.d.ts","./node_modules/element-plus/es/components/check-tag/index.d.ts","./node_modules/element-plus/es/components/checkbox/src/checkbox.d.ts","./node_modules/element-plus/es/components/checkbox/src/checkbox.vue.d.ts","./node_modules/element-plus/es/components/checkbox/src/checkbox-button.vue.d.ts","./node_modules/element-plus/es/components/checkbox/src/checkbox-group.d.ts","./node_modules/element-plus/es/components/checkbox/src/checkbox-group.vue.d.ts","./node_modules/element-plus/es/components/checkbox/src/constants.d.ts","./node_modules/element-plus/es/components/checkbox/index.d.ts","./node_modules/element-plus/es/components/col/src/col.d.ts","./node_modules/element-plus/es/components/col/src/col.vue.d.ts","./node_modules/element-plus/es/components/col/index.d.ts","./node_modules/element-plus/es/components/collapse/src/collapse.d.ts","./node_modules/element-plus/es/components/collapse/src/collapse.vue.d.ts","./node_modules/element-plus/es/components/collapse/src/collapse-item.d.ts","./node_modules/element-plus/es/components/collapse/src/collapse-item.vue.d.ts","./node_modules/element-plus/es/components/collapse/src/constants.d.ts","./node_modules/element-plus/es/components/collapse/src/instance.d.ts","./node_modules/element-plus/es/components/collapse/index.d.ts","./node_modules/element-plus/es/components/collapse-transition/src/collapse-transition.vue.d.ts","./node_modules/element-plus/es/components/collapse-transition/index.d.ts","./node_modules/@ctrl/tinycolor/dist/interfaces.d.ts","./node_modules/@ctrl/tinycolor/dist/index.d.ts","./node_modules/@ctrl/tinycolor/dist/css-color-names.d.ts","./node_modules/@ctrl/tinycolor/dist/readability.d.ts","./node_modules/@ctrl/tinycolor/dist/to-ms-filter.d.ts","./node_modules/@ctrl/tinycolor/dist/from-ratio.d.ts","./node_modules/@ctrl/tinycolor/dist/format-input.d.ts","./node_modules/@ctrl/tinycolor/dist/random.d.ts","./node_modules/@ctrl/tinycolor/dist/conversion.d.ts","./node_modules/@ctrl/tinycolor/dist/public_api.d.ts","./node_modules/element-plus/es/components/color-picker-panel/src/utils/color.d.ts","./node_modules/element-plus/es/components/color-picker-panel/src/color-picker-panel.d.ts","./node_modules/element-plus/es/components/color-picker-panel/src/color-picker-panel.vue.d.ts","./node_modules/element-plus/es/components/color-picker-panel/index.d.ts","./node_modules/element-plus/es/components/color-picker/src/color-picker.d.ts","./node_modules/element-plus/es/components/color-picker/src/color-picker.vue.d.ts","./node_modules/element-plus/es/components/color-picker/index.d.ts","./node_modules/element-plus/es/components/message/src/message.vue.d.ts","./node_modules/element-plus/es/components/message/src/message.d.ts","./node_modules/element-plus/es/components/message/index.d.ts","./node_modules/element-plus/es/components/dialog/src/dialog-content.d.ts","./node_modules/element-plus/es/components/dialog/src/dialog.d.ts","./node_modules/element-plus/es/components/dialog/src/dialog.vue.d.ts","./node_modules/element-plus/es/components/dialog/src/use-dialog.d.ts","./node_modules/element-plus/es/components/dialog/src/constants.d.ts","./node_modules/element-plus/es/components/dialog/index.d.ts","./node_modules/element-plus/es/components/link/src/link.d.ts","./node_modules/element-plus/es/components/link/src/link.vue.d.ts","./node_modules/element-plus/es/components/link/index.d.ts","./node_modules/element-plus/es/components/table/src/store/tree.d.ts","./node_modules/element-plus/es/components/table/src/store/index.d.ts","./node_modules/element-plus/es/components/table/src/util.d.ts","./node_modules/element-plus/es/components/table/src/table/defaults.d.ts","./node_modules/element-plus/es/components/table/src/table-column/defaults.d.ts","./node_modules/element-plus/es/components/table/src/table-header/index.d.ts","./node_modules/element-plus/es/components/table/src/table-layout.d.ts","./node_modules/element-plus/es/components/table/src/table.vue.d.ts","./node_modules/element-plus/es/components/table/src/table-column/index.d.ts","./node_modules/element-plus/es/components/table/src/tablecolumn.d.ts","./node_modules/element-plus/es/components/table/index.d.ts","./node_modules/element-plus/es/components/config-provider/src/config-provider-props.d.ts","./node_modules/element-plus/es/components/config-provider/src/config-provider.d.ts","./node_modules/element-plus/es/components/config-provider/src/constants.d.ts","./node_modules/element-plus/es/components/config-provider/src/hooks/use-global-config.d.ts","./node_modules/element-plus/es/components/config-provider/index.d.ts","./node_modules/element-plus/es/components/container/src/container.vue.d.ts","./node_modules/element-plus/es/components/container/src/aside.vue.d.ts","./node_modules/element-plus/es/components/container/src/footer.vue.d.ts","./node_modules/element-plus/es/components/container/src/header.vue.d.ts","./node_modules/element-plus/es/components/container/src/main.vue.d.ts","./node_modules/element-plus/es/components/container/index.d.ts","./node_modules/element-plus/es/components/countdown/src/countdown.d.ts","./node_modules/element-plus/es/components/countdown/src/countdown.vue.d.ts","./node_modules/element-plus/es/components/countdown/index.d.ts","./node_modules/element-plus/es/components/time-picker/src/common/props.d.ts","./node_modules/element-plus/es/components/time-picker/src/time-picker.d.ts","./node_modules/element-plus/es/components/time-picker/src/common/picker.vue.d.ts","./node_modules/element-plus/es/components/time-picker/src/time-picker-com/panel-time-pick.vue.d.ts","./node_modules/element-plus/es/components/time-picker/src/utils.d.ts","./node_modules/element-plus/es/components/time-picker/src/composables/use-common-picker.d.ts","./node_modules/element-plus/es/components/time-picker/src/constants.d.ts","./node_modules/element-plus/es/components/time-picker/index.d.ts","./node_modules/element-plus/es/components/date-picker-panel/src/date-picker-panel.d.ts","./node_modules/element-plus/es/components/date-picker-panel/src/constants.d.ts","./node_modules/element-plus/es/components/date-picker-panel/src/types.d.ts","./node_modules/element-plus/es/components/date-picker-panel/src/props/date-picker-panel.d.ts","./node_modules/element-plus/es/components/date-picker-panel/src/instance.d.ts","./node_modules/element-plus/es/components/date-picker-panel/index.d.ts","./node_modules/element-plus/es/components/date-picker/src/date-picker.d.ts","./node_modules/element-plus/es/components/date-picker/src/props.d.ts","./node_modules/element-plus/es/components/date-picker/src/instance.d.ts","./node_modules/element-plus/es/components/date-picker/index.d.ts","./node_modules/element-plus/es/components/descriptions/src/description.d.ts","./node_modules/element-plus/es/components/descriptions/src/description.vue.d.ts","./node_modules/element-plus/es/components/descriptions/src/description-item.d.ts","./node_modules/element-plus/es/components/descriptions/index.d.ts","./node_modules/element-plus/es/components/divider/src/divider.d.ts","./node_modules/element-plus/es/components/divider/src/divider.vue.d.ts","./node_modules/element-plus/es/components/divider/index.d.ts","./node_modules/element-plus/es/components/drawer/src/drawer.d.ts","./node_modules/element-plus/es/components/drawer/src/drawer.vue.d.ts","./node_modules/element-plus/es/components/drawer/index.d.ts","./node_modules/element-plus/es/components/dropdown/src/dropdown.vue.d.ts","./node_modules/element-plus/es/components/dropdown/src/dropdown-item.vue.d.ts","./node_modules/element-plus/es/components/dropdown/src/dropdown-menu.vue.d.ts","./node_modules/element-plus/es/components/dropdown/src/dropdown.d.ts","./node_modules/element-plus/es/components/dropdown/src/instance.d.ts","./node_modules/element-plus/es/components/dropdown/src/tokens.d.ts","./node_modules/element-plus/es/components/dropdown/index.d.ts","./node_modules/element-plus/es/components/empty/src/empty.d.ts","./node_modules/element-plus/es/components/empty/src/empty.vue.d.ts","./node_modules/element-plus/es/components/empty/src/instance.d.ts","./node_modules/element-plus/es/components/empty/index.d.ts","./node_modules/async-validator/dist-types/interface.d.ts","./node_modules/async-validator/dist-types/index.d.ts","./node_modules/element-plus/es/components/form/src/utils.d.ts","./node_modules/element-plus/es/components/form/src/types.d.ts","./node_modules/element-plus/es/components/form/src/form-item.d.ts","./node_modules/element-plus/es/components/form/src/form.d.ts","./node_modules/element-plus/es/components/form/src/form.vue.d.ts","./node_modules/element-plus/es/components/form/src/form-item.vue.d.ts","./node_modules/element-plus/es/components/form/src/constants.d.ts","./node_modules/element-plus/es/components/form/src/hooks/use-form-common-props.d.ts","./node_modules/element-plus/es/components/form/src/hooks/use-form-item.d.ts","./node_modules/element-plus/es/components/form/src/hooks/index.d.ts","./node_modules/element-plus/es/components/form/index.d.ts","./node_modules/element-plus/es/components/icon/src/icon.d.ts","./node_modules/element-plus/es/components/icon/src/icon.vue.d.ts","./node_modules/element-plus/es/components/icon/index.d.ts","./node_modules/element-plus/es/components/image/src/image.d.ts","./node_modules/element-plus/es/components/image-viewer/src/image-viewer.d.ts","./node_modules/element-plus/es/components/image-viewer/src/image-viewer.vue.d.ts","./node_modules/element-plus/es/components/image-viewer/index.d.ts","./node_modules/element-plus/es/components/image/src/image.vue.d.ts","./node_modules/element-plus/es/components/image/index.d.ts","./node_modules/element-plus/es/components/input-number/src/input-number.d.ts","./node_modules/element-plus/es/components/input-number/src/input-number.vue.d.ts","./node_modules/element-plus/es/components/input-number/index.d.ts","./node_modules/element-plus/es/components/input-tag/src/input-tag.d.ts","./node_modules/element-plus/es/components/input-tag/src/input-tag.vue.d.ts","./node_modules/element-plus/es/components/input-tag/src/instance.d.ts","./node_modules/element-plus/es/components/input-tag/index.d.ts","./node_modules/element-plus/es/components/menu/src/types.d.ts","./node_modules/element-plus/es/components/menu/src/menu.d.ts","./node_modules/element-plus/es/components/menu/src/menu-item.d.ts","./node_modules/element-plus/es/components/menu/src/menu-item.vue.d.ts","./node_modules/element-plus/es/components/menu/src/menu-item-group.vue.d.ts","./node_modules/element-plus/es/components/menu/src/sub-menu.d.ts","./node_modules/element-plus/es/components/menu/src/menu-item-group.d.ts","./node_modules/element-plus/es/components/menu/src/instance.d.ts","./node_modules/element-plus/es/components/menu/src/tokens.d.ts","./node_modules/element-plus/es/components/menu/index.d.ts","./node_modules/element-plus/es/components/overlay/src/overlay.d.ts","./node_modules/element-plus/es/components/overlay/index.d.ts","./node_modules/element-plus/es/components/page-header/src/page-header.d.ts","./node_modules/element-plus/es/components/page-header/src/page-header.vue.d.ts","./node_modules/element-plus/es/components/page-header/index.d.ts","./node_modules/element-plus/es/components/pagination/src/pagination.d.ts","./node_modules/element-plus/es/components/pagination/src/constants.d.ts","./node_modules/element-plus/es/components/pagination/index.d.ts","./node_modules/element-plus/es/components/popconfirm/src/popconfirm.d.ts","./node_modules/element-plus/es/components/popconfirm/src/popconfirm.vue.d.ts","./node_modules/element-plus/es/components/popconfirm/index.d.ts","./node_modules/element-plus/es/components/progress/src/progress.d.ts","./node_modules/element-plus/es/components/progress/src/progress.vue.d.ts","./node_modules/element-plus/es/components/progress/index.d.ts","./node_modules/element-plus/es/components/radio/src/radio.d.ts","./node_modules/element-plus/es/components/radio/src/radio.vue.d.ts","./node_modules/element-plus/es/components/radio/src/radio-button.d.ts","./node_modules/element-plus/es/components/radio/src/radio-button.vue.d.ts","./node_modules/element-plus/es/components/radio/src/radio-group.d.ts","./node_modules/element-plus/es/components/radio/src/radio-group.vue.d.ts","./node_modules/element-plus/es/components/radio/src/constants.d.ts","./node_modules/element-plus/es/components/radio/index.d.ts","./node_modules/element-plus/es/components/rate/src/rate.d.ts","./node_modules/element-plus/es/components/rate/src/rate.vue.d.ts","./node_modules/element-plus/es/components/rate/index.d.ts","./node_modules/element-plus/es/components/result/src/result.d.ts","./node_modules/element-plus/es/components/result/src/result.vue.d.ts","./node_modules/element-plus/es/components/result/index.d.ts","./node_modules/element-plus/es/components/row/src/row.d.ts","./node_modules/element-plus/es/components/row/src/row.vue.d.ts","./node_modules/element-plus/es/components/row/src/constants.d.ts","./node_modules/element-plus/es/components/row/index.d.ts","./node_modules/element-plus/es/components/scrollbar/src/scrollbar.d.ts","./node_modules/element-plus/es/components/scrollbar/src/scrollbar.vue.d.ts","./node_modules/element-plus/es/components/scrollbar/src/thumb.vue.d.ts","./node_modules/element-plus/es/components/scrollbar/src/thumb.d.ts","./node_modules/element-plus/es/components/scrollbar/src/util.d.ts","./node_modules/element-plus/es/components/scrollbar/src/constants.d.ts","./node_modules/element-plus/es/components/scrollbar/index.d.ts","./node_modules/element-plus/es/components/select-v2/src/select.types.d.ts","./node_modules/element-plus/es/components/virtual-list/src/components/fixed-size-list.d.ts","./node_modules/element-plus/es/components/virtual-list/src/defaults.d.ts","./node_modules/element-plus/es/components/virtual-list/src/types.d.ts","./node_modules/element-plus/es/components/virtual-list/src/components/dynamic-size-list.d.ts","./node_modules/element-plus/es/components/virtual-list/src/components/fixed-size-grid.d.ts","./node_modules/memoize-one/dist/memoize-one.d.ts","./node_modules/element-plus/es/components/virtual-list/src/hooks/use-cache.d.ts","./node_modules/element-plus/es/components/virtual-list/src/props.d.ts","./node_modules/element-plus/es/components/virtual-list/src/builders/build-grid.d.ts","./node_modules/element-plus/es/components/virtual-list/src/components/dynamic-size-grid.d.ts","./node_modules/element-plus/es/components/virtual-list/index.d.ts","./node_modules/element-plus/es/components/select-v2/src/select-dropdown.d.ts","./node_modules/element-plus/es/components/select-v2/src/select.vue.d.ts","./node_modules/element-plus/es/components/select-v2/src/defaults.d.ts","./node_modules/element-plus/es/components/select-v2/src/token.d.ts","./node_modules/element-plus/es/components/select-v2/src/useprops.d.ts","./node_modules/element-plus/es/components/select/src/select.d.ts","./node_modules/element-plus/es/components/select/src/option.d.ts","./node_modules/element-plus/es/components/select/src/type.d.ts","./node_modules/element-plus/es/components/select/src/select.vue.d.ts","./node_modules/element-plus/es/components/select/src/option.vue.d.ts","./node_modules/element-plus/es/components/select/src/option-group.vue.d.ts","./node_modules/element-plus/es/components/select/src/token.d.ts","./node_modules/element-plus/es/components/select/index.d.ts","./node_modules/element-plus/es/components/select-v2/index.d.ts","./node_modules/element-plus/es/components/skeleton/src/skeleton.d.ts","./node_modules/element-plus/es/components/skeleton/src/skeleton.vue.d.ts","./node_modules/element-plus/es/components/skeleton/src/skeleton-item.d.ts","./node_modules/element-plus/es/components/skeleton/src/skeleton-item.vue.d.ts","./node_modules/element-plus/es/components/skeleton/index.d.ts","./node_modules/element-plus/es/components/slider/src/slider.vue.d.ts","./node_modules/element-plus/es/components/slider/src/marker.d.ts","./node_modules/element-plus/es/components/slider/src/slider.d.ts","./node_modules/element-plus/es/components/slider/src/constants.d.ts","./node_modules/element-plus/es/components/slider/index.d.ts","./node_modules/element-plus/es/components/space/src/space.d.ts","./node_modules/element-plus/es/components/space/src/item.d.ts","./node_modules/element-plus/es/components/space/src/use-space.d.ts","./node_modules/element-plus/es/components/space/index.d.ts","./node_modules/element-plus/es/components/statistic/src/statistic.d.ts","./node_modules/element-plus/es/components/statistic/src/statistic.vue.d.ts","./node_modules/element-plus/es/components/statistic/index.d.ts","./node_modules/element-plus/es/components/steps/src/steps.d.ts","./node_modules/element-plus/es/components/steps/src/steps.vue.d.ts","./node_modules/element-plus/es/components/steps/src/item.d.ts","./node_modules/element-plus/es/components/steps/src/item.vue.d.ts","./node_modules/element-plus/es/components/steps/src/tokens.d.ts","./node_modules/element-plus/es/components/steps/index.d.ts","./node_modules/element-plus/es/components/switch/src/switch.d.ts","./node_modules/element-plus/es/components/switch/src/switch.vue.d.ts","./node_modules/element-plus/es/components/switch/index.d.ts","./node_modules/element-plus/es/components/table-v2/src/constants.d.ts","./node_modules/element-plus/es/components/table-v2/src/types.d.ts","./node_modules/element-plus/es/components/table-v2/src/common.d.ts","./node_modules/element-plus/es/components/table-v2/src/row.d.ts","./node_modules/element-plus/es/components/table-v2/src/grid.d.ts","./node_modules/element-plus/es/components/table-v2/src/table.d.ts","./node_modules/element-plus/es/components/table-v2/src/table-grid.d.ts","./node_modules/element-plus/es/components/table-v2/src/composables/use-scrollbar.d.ts","./node_modules/element-plus/es/components/table-v2/src/table-v2.d.ts","./node_modules/element-plus/es/components/table-v2/src/components/auto-resizer.d.ts","./node_modules/element-plus/es/components/table-v2/src/auto-resizer.d.ts","./node_modules/element-plus/es/components/table-v2/src/private.d.ts","./node_modules/element-plus/es/components/table-v2/src/cell.d.ts","./node_modules/element-plus/es/components/table-v2/src/components/cell.d.ts","./node_modules/element-plus/es/components/table-v2/src/header-cell.d.ts","./node_modules/element-plus/es/components/table-v2/src/components/header-cell.d.ts","./node_modules/element-plus/es/components/table-v2/src/header-row.d.ts","./node_modules/element-plus/es/components/table-v2/src/components/header-row.d.ts","./node_modules/element-plus/es/components/table-v2/src/header.d.ts","./node_modules/element-plus/es/components/table-v2/src/composables/use-columns.d.ts","./node_modules/element-plus/es/components/table-v2/src/components/header.d.ts","./node_modules/element-plus/es/components/table-v2/src/components/row.d.ts","./node_modules/element-plus/es/components/table-v2/src/components/sort-icon.d.ts","./node_modules/element-plus/es/components/table-v2/src/components/expand-icon.d.ts","./node_modules/element-plus/es/components/table-v2/src/components/index.d.ts","./node_modules/element-plus/es/components/table-v2/src/composables/use-row.d.ts","./node_modules/element-plus/es/components/table-v2/src/composables/use-data.d.ts","./node_modules/element-plus/es/components/table-v2/src/composables/use-styles.d.ts","./node_modules/element-plus/es/components/table-v2/src/composables/use-auto-resize.d.ts","./node_modules/element-plus/es/components/table-v2/src/composables/index.d.ts","./node_modules/element-plus/es/components/table-v2/src/use-table.d.ts","./node_modules/element-plus/es/components/table-v2/src/renderers/header-cell.d.ts","./node_modules/element-plus/es/components/table-v2/index.d.ts","./node_modules/element-plus/es/components/tabs/src/tab-pane.vue.d.ts","./node_modules/element-plus/es/components/tabs/src/tab-pane.d.ts","./node_modules/element-plus/es/components/tabs/src/constants.d.ts","./node_modules/element-plus/es/components/tabs/src/tab-bar.vue.d.ts","./node_modules/element-plus/es/components/tabs/src/tab-bar.d.ts","./node_modules/element-plus/es/components/tabs/src/tab-nav.d.ts","./node_modules/element-plus/es/components/tabs/src/tabs.d.ts","./node_modules/element-plus/es/components/tabs/index.d.ts","./node_modules/element-plus/es/components/text/src/text.d.ts","./node_modules/element-plus/es/components/text/src/text.vue.d.ts","./node_modules/element-plus/es/components/text/index.d.ts","./node_modules/element-plus/es/components/time-select/src/time-select.d.ts","./node_modules/element-plus/es/components/time-select/src/time-select.vue.d.ts","./node_modules/element-plus/es/components/time-select/index.d.ts","./node_modules/element-plus/es/components/timeline/src/timeline.d.ts","./node_modules/element-plus/es/components/timeline/src/timeline-item.d.ts","./node_modules/element-plus/es/components/timeline/src/timeline-item.vue.d.ts","./node_modules/element-plus/es/components/timeline/src/tokens.d.ts","./node_modules/element-plus/es/components/timeline/index.d.ts","./node_modules/element-plus/es/components/transfer/src/transfer.d.ts","./node_modules/element-plus/es/components/transfer/src/transfer-panel.vue.d.ts","./node_modules/element-plus/es/components/transfer/src/transfer-panel.d.ts","./node_modules/element-plus/es/components/transfer/src/transfer.vue.d.ts","./node_modules/element-plus/es/components/transfer/index.d.ts","./node_modules/element-plus/es/components/tree/src/tree.d.ts","./node_modules/element-plus/es/components/tree/src/model/usedragnode.d.ts","./node_modules/element-plus/es/components/tree/src/tree.type.d.ts","./node_modules/element-plus/es/components/tree/src/model/tree-store.d.ts","./node_modules/element-plus/es/components/tree/src/model/node.d.ts","./node_modules/element-plus/es/components/tree/src/tree.vue.d.ts","./node_modules/element-plus/es/components/tree/src/instance.d.ts","./node_modules/element-plus/es/components/tree/src/tokens.d.ts","./node_modules/element-plus/es/components/tree/index.d.ts","./node_modules/element-plus/es/components/tree-select/src/tree-select.vue.d.ts","./node_modules/element-plus/es/components/tree-select/src/instance.d.ts","./node_modules/element-plus/es/components/tree-select/index.d.ts","./node_modules/element-plus/es/components/tree-v2/src/types.d.ts","./node_modules/element-plus/es/components/tree-v2/src/virtual-tree.d.ts","./node_modules/element-plus/es/components/tree-v2/src/tree.vue.d.ts","./node_modules/element-plus/es/components/tree-v2/src/instance.d.ts","./node_modules/element-plus/es/components/tree-v2/index.d.ts","./node_modules/element-plus/es/components/upload/src/ajax.d.ts","./node_modules/element-plus/es/components/upload/src/upload.d.ts","./node_modules/element-plus/es/components/upload/src/upload.vue.d.ts","./node_modules/element-plus/es/components/upload/src/upload-content.vue.d.ts","./node_modules/element-plus/es/components/upload/src/upload-content.d.ts","./node_modules/element-plus/es/components/upload/src/upload-list.vue.d.ts","./node_modules/element-plus/es/components/upload/src/upload-list.d.ts","./node_modules/element-plus/es/components/upload/src/upload-dragger.vue.d.ts","./node_modules/element-plus/es/components/upload/src/upload-dragger.d.ts","./node_modules/element-plus/es/components/upload/src/constants.d.ts","./node_modules/element-plus/es/components/upload/index.d.ts","./node_modules/element-plus/es/components/watermark/src/watermark.d.ts","./node_modules/element-plus/es/components/watermark/src/watermark.vue.d.ts","./node_modules/element-plus/es/components/watermark/index.d.ts","./node_modules/element-plus/es/components/tour/src/content.d.ts","./node_modules/element-plus/es/components/tour/src/types.d.ts","./node_modules/element-plus/es/components/tour/src/tour.d.ts","./node_modules/element-plus/es/components/tour/src/tour.vue.d.ts","./node_modules/element-plus/es/components/tour/src/step.d.ts","./node_modules/element-plus/es/components/tour/src/step.vue.d.ts","./node_modules/element-plus/es/components/tour/index.d.ts","./node_modules/element-plus/es/components/anchor/src/anchor.d.ts","./node_modules/element-plus/es/components/anchor/src/anchor.vue.d.ts","./node_modules/element-plus/es/components/anchor/src/anchor-link.d.ts","./node_modules/element-plus/es/components/anchor/src/anchor-link.vue.d.ts","./node_modules/element-plus/es/components/anchor/index.d.ts","./node_modules/element-plus/es/components/segmented/src/types.d.ts","./node_modules/element-plus/es/components/segmented/src/segmented.vue.d.ts","./node_modules/element-plus/es/components/segmented/src/segmented.d.ts","./node_modules/element-plus/es/components/segmented/index.d.ts","./node_modules/element-plus/es/components/mention/src/types.d.ts","./node_modules/element-plus/es/components/mention/src/helper.d.ts","./node_modules/element-plus/es/components/mention/src/mention.d.ts","./node_modules/element-plus/es/components/mention/src/mention.vue.d.ts","./node_modules/element-plus/es/components/mention/index.d.ts","./node_modules/element-plus/es/components/splitter/src/type.d.ts","./node_modules/element-plus/es/components/splitter/src/splitter.d.ts","./node_modules/element-plus/es/components/splitter/src/splitter.vue.d.ts","./node_modules/element-plus/es/components/splitter/src/split-panel.d.ts","./node_modules/element-plus/es/components/splitter/src/split-panel.vue.d.ts","./node_modules/element-plus/es/components/splitter/index.d.ts","./node_modules/element-plus/es/components/infinite-scroll/src/index.d.ts","./node_modules/element-plus/es/components/infinite-scroll/index.d.ts","./node_modules/element-plus/es/components/loading/src/types.d.ts","./node_modules/element-plus/es/components/loading/src/loading.d.ts","./node_modules/element-plus/es/components/loading/src/service.d.ts","./node_modules/element-plus/es/components/loading/src/directive.d.ts","./node_modules/element-plus/es/components/loading/index.d.ts","./node_modules/element-plus/es/components/message-box/src/message-box.type.d.ts","./node_modules/element-plus/es/components/message-box/src/messagebox.d.ts","./node_modules/element-plus/es/components/message-box/index.d.ts","./node_modules/element-plus/es/components/notification/src/notification.vue.d.ts","./node_modules/element-plus/es/components/notification/src/notification.d.ts","./node_modules/element-plus/es/components/notification/index.d.ts","./node_modules/element-plus/es/components/popover/src/popover.d.ts","./node_modules/element-plus/es/components/popover/src/popover.vue.d.ts","./node_modules/element-plus/es/components/popover/src/directive.d.ts","./node_modules/element-plus/es/components/popover/index.d.ts","./node_modules/element-plus/es/components/index.d.ts","./node_modules/element-plus/es/defaults.d.ts","./node_modules/element-plus/es/directives/click-outside/index.d.ts","./node_modules/element-plus/es/directives/repeat-click/index.d.ts","./node_modules/element-plus/es/directives/trap-focus/index.d.ts","./node_modules/normalize-wheel-es/index.d.ts","./node_modules/element-plus/es/directives/mousewheel/index.d.ts","./node_modules/element-plus/es/directives/index.d.ts","./node_modules/element-plus/es/make-installer.d.ts","./node_modules/element-plus/es/index.d.ts","./src/utils/feedback.ts","./src/layout/default/components/header/user-drop-down.vue","./src/layout/default/components/header/index.vue","./src/layout/default/components/main.vue","./src/layout/default/components/sidebar/logo.vue","./src/utils/util.ts","./src/layout/default/components/sidebar/menu-item.vue","./src/layout/default/components/sidebar/menu.vue","./src/layout/default/components/sidebar/side.vue","./src/layout/default/components/sidebar/index.vue","./src/layout/default/index.vue","./src/views/error/components/error.vue","./src/views/error/404.vue","./src/views/error/403.vue","./node_modules/@element-plus/icons-vue/dist/types/components/add-location.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/aim.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/alarm-clock.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/apple.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/arrow-down-bold.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/arrow-down.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/arrow-left-bold.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/arrow-left.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/arrow-right-bold.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/arrow-right.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/arrow-up-bold.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/arrow-up.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/avatar.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/back.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/baseball.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/basketball.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/bell-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/bell.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/bicycle.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/bottom-left.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/bottom-right.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/bottom.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/bowl.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/box.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/briefcase.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/brush-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/brush.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/burger.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/calendar.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/camera-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/camera.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/caret-bottom.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/caret-left.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/caret-right.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/caret-top.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/cellphone.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/chat-dot-round.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/chat-dot-square.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/chat-line-round.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/chat-line-square.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/chat-round.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/chat-square.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/check.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/checked.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/cherry.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/chicken.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/chrome-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/circle-check-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/circle-check.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/circle-close-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/circle-close.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/circle-plus-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/circle-plus.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/clock.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/close-bold.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/close.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/cloudy.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/coffee-cup.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/coffee.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/coin.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/cold-drink.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/collection-tag.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/collection.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/comment.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/compass.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/connection.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/coordinate.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/copy-document.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/cpu.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/credit-card.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/crop.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/d-arrow-left.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/d-arrow-right.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/d-caret.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/data-analysis.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/data-board.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/data-line.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/delete-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/delete-location.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/delete.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/dessert.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/discount.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/dish-dot.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/dish.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/document-add.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/document-checked.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/document-copy.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/document-delete.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/document-remove.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/document.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/download.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/drizzling.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/edit-pen.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/edit.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/eleme-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/eleme.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/element-plus.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/expand.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/failed.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/female.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/files.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/film.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/filter.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/finished.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/first-aid-kit.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/flag.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/fold.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/folder-add.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/folder-checked.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/folder-delete.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/folder-opened.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/folder-remove.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/folder.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/food.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/football.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/fork-spoon.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/fries.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/full-screen.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/goblet-full.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/goblet-square-full.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/goblet-square.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/goblet.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/gold-medal.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/goods-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/goods.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/grape.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/grid.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/guide.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/handbag.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/headset.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/help-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/help.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/hide.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/histogram.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/home-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/hot-water.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/house.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/ice-cream-round.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/ice-cream-square.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/ice-cream.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/ice-drink.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/ice-tea.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/info-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/iphone.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/key.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/knife-fork.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/lightning.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/link.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/list.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/loading.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/location-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/location-information.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/location.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/lock.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/lollipop.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/magic-stick.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/magnet.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/male.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/management.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/map-location.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/medal.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/memo.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/menu.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/message-box.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/message.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/mic.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/microphone.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/milk-tea.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/minus.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/money.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/monitor.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/moon-night.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/moon.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/more-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/more.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/mostly-cloudy.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/mouse.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/mug.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/mute-notification.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/mute.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/no-smoking.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/notebook.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/notification.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/odometer.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/office-building.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/open.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/operation.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/opportunity.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/orange.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/paperclip.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/partly-cloudy.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/pear.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/phone-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/phone.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/picture-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/picture-rounded.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/picture.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/pie-chart.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/place.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/platform.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/plus.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/pointer.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/position.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/postcard.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/pouring.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/present.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/price-tag.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/printer.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/promotion.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/quartz-watch.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/question-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/rank.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/reading-lamp.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/reading.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/refresh-left.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/refresh-right.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/refresh.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/refrigerator.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/remove-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/remove.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/right.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/scale-to-original.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/school.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/scissor.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/search.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/select.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sell.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/semi-select.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/service.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/set-up.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/setting.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/share.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/ship.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/shop.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/shopping-bag.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/shopping-cart-full.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/shopping-cart.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/shopping-trolley.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/smoking.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/soccer.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sold-out.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sort-down.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sort-up.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sort.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/stamp.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/star-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/star.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/stopwatch.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/success-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sugar.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/suitcase-line.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/suitcase.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sunny.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sunrise.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/sunset.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/switch-button.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/switch-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/switch.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/takeaway-box.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/ticket.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/tickets.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/timer.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/toilet-paper.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/tools.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/top-left.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/top-right.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/top.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/trend-charts.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/trophy-base.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/trophy.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/turn-off.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/umbrella.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/unlock.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/upload-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/upload.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/user-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/user.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/van.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/video-camera-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/video-camera.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/video-pause.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/video-play.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/view.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/wallet-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/wallet.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/warn-triangle-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/warning-filled.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/warning.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/watch.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/watermelon.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/wind-power.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/zoom-in.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/zoom-out.vue.d.ts","./node_modules/@element-plus/icons-vue/dist/types/components/index.d.ts","./node_modules/@element-plus/icons-vue/dist/types/index.d.ts","./src/hooks/uselockfn.ts","./src/layout/components/footer.vue","./src/views/account/login.vue","./src/views/account/change-password.vue","./src/utils/wecomoauthpostmessage.ts","./src/views/account/bind-work-wechat.vue","./src/views/user/setting.vue","./src/api/doctor.ts","./src/views/doctor/progress.vue","./src/api/decoration.ts","./src/views/decoration/component/widgets/index.ts","./src/views/decoration/component/pages/preview-pc.vue","./src/views/decoration/pc_details.vue","./src/api/fans.ts","./src/views/fans/h5.vue","./src/api/tcm.ts","./src/api/order.ts","./src/api/channel/weapp.ts","./src/hooks/usepaging.ts","./src/utils/perm.ts","./node_modules/echarts/types/dist/echarts.d.ts","./node_modules/echarts/index.d.ts","./src/views/tcm/diagnosis/components/bloodrecordlist.vue","./src/views/tcm/diagnosis/components/dietrecordlist.vue","./src/views/tcm/diagnosis/components/exerciserecordlist.vue","./src/views/tcm/diagnosis/components/caserecordlist.vue","./src/views/tcm/diagnosis/components/callrecordpanel.vue","./src/utils/im-business-message-parse.ts","./src/views/tcm/diagnosis/components/imchatrecordpanel.vue","./src/views/tcm/diagnosis/components/assignlogpanel.vue","./src/views/tcm/diagnosis/components/appointmentrecordpanel.vue","./src/views/patient/reception/components/notetimeline.vue","./src/api/medicine.ts","./src/components/medicine-name-select/index.vue","./src/utils/diabetes-discovery-display.ts","./node_modules/html2canvas/dist/types/core/logger.d.ts","./node_modules/html2canvas/dist/types/core/cache-storage.d.ts","./node_modules/html2canvas/dist/types/core/context.d.ts","./node_modules/html2canvas/dist/types/css/layout/bounds.d.ts","./node_modules/html2canvas/dist/types/dom/document-cloner.d.ts","./node_modules/html2canvas/dist/types/css/syntax/tokenizer.d.ts","./node_modules/html2canvas/dist/types/css/syntax/parser.d.ts","./node_modules/html2canvas/dist/types/css/types/index.d.ts","./node_modules/html2canvas/dist/types/css/ipropertydescriptor.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/background-clip.d.ts","./node_modules/html2canvas/dist/types/css/itypedescriptor.d.ts","./node_modules/html2canvas/dist/types/css/types/color.d.ts","./node_modules/html2canvas/dist/types/css/types/length-percentage.d.ts","./node_modules/html2canvas/dist/types/css/types/image.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/background-image.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/background-origin.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/background-position.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/background-repeat.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/background-size.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/border-radius.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/border-style.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/border-width.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/direction.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/display.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/float.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/letter-spacing.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/line-break.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/list-style-image.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/list-style-position.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/list-style-type.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/overflow.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/overflow-wrap.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/text-align.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/position.d.ts","./node_modules/html2canvas/dist/types/css/types/length.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/text-shadow.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/text-transform.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/transform.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/transform-origin.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/visibility.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/word-break.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/z-index.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/opacity.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/text-decoration-line.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/font-family.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/font-weight.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/font-variant.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/font-style.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/content.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/counter-increment.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/counter-reset.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/duration.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/quotes.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/box-shadow.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/paint-order.d.ts","./node_modules/html2canvas/dist/types/css/property-descriptors/webkit-text-stroke-width.d.ts","./node_modules/html2canvas/dist/types/css/index.d.ts","./node_modules/html2canvas/dist/types/css/layout/text.d.ts","./node_modules/html2canvas/dist/types/dom/text-container.d.ts","./node_modules/html2canvas/dist/types/dom/element-container.d.ts","./node_modules/html2canvas/dist/types/render/vector.d.ts","./node_modules/html2canvas/dist/types/render/bezier-curve.d.ts","./node_modules/html2canvas/dist/types/render/path.d.ts","./node_modules/html2canvas/dist/types/render/bound-curves.d.ts","./node_modules/html2canvas/dist/types/render/effects.d.ts","./node_modules/html2canvas/dist/types/render/stacking-context.d.ts","./node_modules/html2canvas/dist/types/dom/replaced-elements/canvas-element-container.d.ts","./node_modules/html2canvas/dist/types/dom/replaced-elements/image-element-container.d.ts","./node_modules/html2canvas/dist/types/dom/replaced-elements/svg-element-container.d.ts","./node_modules/html2canvas/dist/types/dom/replaced-elements/index.d.ts","./node_modules/html2canvas/dist/types/render/renderer.d.ts","./node_modules/html2canvas/dist/types/render/canvas/canvas-renderer.d.ts","./node_modules/html2canvas/dist/types/index.d.ts","./node_modules/jspdf/types/index.d.ts","./src/components/tcm-prescription/index.vue","./src/api/patient.ts","./src/utils/diagnosis-sync-events.ts","./src/views/tcm/diagnosis/edit.vue","./src/views/tcm/diagnosis/detail.vue","./node_modules/dayjs/plugin/isoweek.d.ts","./src/views/tcm/diagnosis/appointment.vue","./node_modules/trtc-sdk-v5/plugins/cdn-streaming/cdn-streaming.esm.d.ts","./node_modules/trtc-sdk-v5/plugins/device-detector/device-detector.esm.d.ts","./node_modules/trtc-sdk-v5/plugins/video-effect/virtual-background/virtual-background.esm.d.ts","./node_modules/trtc-sdk-v5/plugins/video-effect/watermark/watermark.esm.d.ts","./node_modules/trtc-sdk-v5/plugins/video-effect/beauty/beauty.esm.d.ts","./node_modules/trtc-sdk-v5/plugins/video-effect/basic-beauty/basic-beauty.esm.d.ts","./node_modules/trtc-sdk-v5/plugins/cross-room/cross-room.esm.d.ts","./node_modules/trtc-sdk-v5/plugins/custom-encryption/custom-encryption.esm.d.ts","./node_modules/trtc-sdk-v5/plugins/video-effect/video-mixer/video-mixer.esm.d.ts","./node_modules/trtc-sdk-v5/plugins/small-stream-auto-switcher/small-stream-auto-switcher.esm.d.ts","./node_modules/trtc-sdk-v5/plugins/chorus/chorus.esm.d.ts","./node_modules/trtc-sdk-v5/plugins/lebplayer/lebplayer.esm.d.ts","./node_modules/trtc-sdk-v5/plugins/realtime-transcriber/realtime-transcriber.esm.d.ts","./node_modules/trtc-sdk-v5/index.d.ts","./src/views/tcm/diagnosis/components/assistantwatchcalldialog.vue","./src/views/tcm/diagnosis/index_h5.vue","./src/router/routes.ts","./src/router/index.ts","./src/utils/request/cancel.ts","./src/utils/request/type.d.ts","./src/utils/request/axios.ts","./src/utils/wecombindguard.ts","./src/utils/request/index.ts","./src/api/app.ts","./src/stores/modules/app.ts","./src/api/chat.ts","./src/components/chat-notify-toast/index.vue","./src/app.vue","./src/permission.ts","./src/install/index.ts","./src/main.ts","./src/api/article.ts","./src/api/consumer.ts","./src/api/file.ts","./src/api/finance.ts","./src/api/message.ts","./src/api/qywx-msg.ts","./src/api/qywx.ts","./src/api/stats.ts","./src/api/app/recharge.ts","./src/api/channel/h5.ts","./src/api/channel/open_setting.ts","./src/api/channel/wx_oa.ts","./src/api/org/department.ts","./src/api/org/post.ts","./src/api/perms/admin.ts","./src/api/perms/menu.ts","./src/api/perms/role.ts","./src/api/setting/dict.ts","./src/api/setting/pay.ts","./src/api/setting/search.ts","./src/api/setting/storage.ts","./src/api/setting/user.ts","./src/api/setting/website.ts","./src/api/tools/code.ts","./node_modules/@tencentcloud/chat-uikit-vue3/dist/components/chat/chat.vue.d.ts","./node_modules/@tencentcloud/chat-uikit-vue3/dist/components/chat/index.d.ts","./node_modules/@tencentcloud/chat-uikit-vue3/dist/components/chatheader/chatheader.vue.d.ts","./node_modules/@tencentcloud/chat-uikit-vue3/dist/components/chatheader/hooks/usechatheader.d.ts","./node_modules/@tencentcloud/chat-uikit-vue3/dist/components/chatheader/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/login.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/loginstate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/avatar/avatar.vue.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/avatar/constants/avatar.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/avatar/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/userpicker/type.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/userpicker/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/basecomp/view/view.vue.d.ts","./node_modules/tuikit-atomicx-vue3/dist/basecomp/view/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/chatsetting/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/uikitmodalstate/uikitmodalstate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/uikitmodalstate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/uikitmodal/type.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/uikitmodal/uikitmodal.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/uikitmodal/useroommodal/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/uikitmodal/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/subentry/common/base.d.ts","./node_modules/@tencentcloud/tuiroom-engine-js/node_modules/@tencentcloud/chat/index.d.ts","./node_modules/@tencentcloud/tuiroom-engine-js/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/device.d.ts","./node_modules/@tencentcloud/chat/index.d.ts","./node_modules/@tencentcloud/chat-uikit-engine/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/message.d.ts","./node_modules/tuikit-atomicx-vue3/dist/hooks/useofflinepushinfo/types.d.ts","./node_modules/tuikit-atomicx-vue3/dist/hooks/useofflinepushinfo/useofflinepushinfo.d.ts","./node_modules/tuikit-atomicx-vue3/dist/hooks/useofflinepushinfo/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/engine.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/search.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/contact.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/conversation.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/call.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/groupsettingstate/types.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/chatsetting.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/types.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/live.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/stream.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/videomixer.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/audience.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/seat.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/monitor.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/coguest.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/cohost.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/battle.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/barrage.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/room.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/participant.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/beauty.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/virtualbackground.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/user.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/devicestate/devicestate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/devicestate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/hooks/useroomengine.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/audiosettingpanel/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/videosettingpanel/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/subentry/common/rtc.d.ts","./node_modules/tuikit-atomicx-vue3/dist/subentry/common/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/barragestate/barragestate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/barragestate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/battlestate/battlestate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/battlestate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/cogueststate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/cohoststate/cohoststate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/cohoststate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/liveaudiencestate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/liveliststate/liveliststate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/liveliststate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/livemonitorstate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/utils/eventcenter.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/liveseatstate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/videomixerstate/videomixerstate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/videomixerstate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/barrageinput/barrageinputh5.vue.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/barrageinput/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/barragelist/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/camerabutton/index.vue.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/camerabutton/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/coguestpanel/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/cohostpanel/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/liveaudiencelist/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/livelist/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/livemonitorview/livemonitorview.vue.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/livemonitorview/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/livescenepanel/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/liveview/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/micbutton/index.vue.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/micbutton/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/streammixer/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/subentry/live/live.d.ts","./node_modules/tuikit-atomicx-vue3/dist/types/asr.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/asrstate/asrstate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/freebeautystate/freebeautystate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/freebeautystate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/roomparticipantstate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/roomstate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/virtualbackgroundstate/virtualbackgroundstate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/virtualbackgroundstate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/roomparticipantlist/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/roomparticipantview/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/roomview/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/scheduleroompanel/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/virtualbackgroundpanel/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/freebeautypanel/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/subentry/room/room.d.ts","./node_modules/tuikit-atomicx-vue3/dist/i18n/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/contactlist/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/conversationlist/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/messageinput/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/hooks/usemessageactions.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/messagelist/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/components/search/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/c2csettingstate/c2csettingstate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/c2csettingstate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/contactliststate/contactliststate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/contactliststate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/conversationliststate/conversationliststate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/conversationliststate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/groupsettingstate/groupsettingstate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/groupsettingstate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/messageactionstate/messageactionstate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/messageactionstate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/messageinputstate/type.d.ts","./node_modules/orderedmap/dist/index.d.ts","./node_modules/prosemirror-model/dist/index.d.ts","./node_modules/prosemirror-transform/dist/index.d.ts","./node_modules/prosemirror-view/dist/index.d.ts","./node_modules/prosemirror-state/dist/index.d.ts","./node_modules/@tiptap/pm/state/dist/index.d.ts","./node_modules/@tiptap/pm/model/dist/index.d.ts","./node_modules/@tiptap/pm/view/dist/index.d.ts","./node_modules/@tiptap/core/dist/eventemitter.d.ts","./node_modules/@tiptap/pm/transform/dist/index.d.ts","./node_modules/@tiptap/core/dist/inputrule.d.ts","./node_modules/@tiptap/core/dist/pasterule.d.ts","./node_modules/@tiptap/core/dist/node.d.ts","./node_modules/@tiptap/core/dist/mark.d.ts","./node_modules/@tiptap/core/dist/extension.d.ts","./node_modules/@tiptap/core/dist/types.d.ts","./node_modules/@tiptap/core/dist/extensionmanager.d.ts","./node_modules/@tiptap/core/dist/nodepos.d.ts","./node_modules/@tiptap/core/dist/extensions/clipboardtextserializer.d.ts","./node_modules/@tiptap/core/dist/commands/blur.d.ts","./node_modules/@tiptap/core/dist/commands/clearcontent.d.ts","./node_modules/@tiptap/core/dist/commands/clearnodes.d.ts","./node_modules/@tiptap/core/dist/commands/command.d.ts","./node_modules/@tiptap/core/dist/commands/createparagraphnear.d.ts","./node_modules/@tiptap/core/dist/commands/cut.d.ts","./node_modules/@tiptap/core/dist/commands/deletecurrentnode.d.ts","./node_modules/@tiptap/core/dist/commands/deletenode.d.ts","./node_modules/@tiptap/core/dist/commands/deleterange.d.ts","./node_modules/@tiptap/core/dist/commands/deleteselection.d.ts","./node_modules/@tiptap/core/dist/commands/enter.d.ts","./node_modules/@tiptap/core/dist/commands/exitcode.d.ts","./node_modules/@tiptap/core/dist/commands/extendmarkrange.d.ts","./node_modules/@tiptap/core/dist/commands/first.d.ts","./node_modules/@tiptap/core/dist/commands/focus.d.ts","./node_modules/@tiptap/core/dist/commands/foreach.d.ts","./node_modules/@tiptap/core/dist/commands/insertcontent.d.ts","./node_modules/@tiptap/core/dist/commands/insertcontentat.d.ts","./node_modules/@tiptap/core/dist/commands/join.d.ts","./node_modules/@tiptap/core/dist/commands/joinitembackward.d.ts","./node_modules/@tiptap/core/dist/commands/joinitemforward.d.ts","./node_modules/@tiptap/core/dist/commands/jointextblockbackward.d.ts","./node_modules/@tiptap/core/dist/commands/jointextblockforward.d.ts","./node_modules/@tiptap/core/dist/commands/keyboardshortcut.d.ts","./node_modules/@tiptap/core/dist/commands/lift.d.ts","./node_modules/@tiptap/core/dist/commands/liftemptyblock.d.ts","./node_modules/@tiptap/core/dist/commands/liftlistitem.d.ts","./node_modules/@tiptap/core/dist/commands/newlineincode.d.ts","./node_modules/@tiptap/core/dist/commands/resetattributes.d.ts","./node_modules/@tiptap/core/dist/commands/scrollintoview.d.ts","./node_modules/@tiptap/core/dist/commands/selectall.d.ts","./node_modules/@tiptap/core/dist/commands/selectnodebackward.d.ts","./node_modules/@tiptap/core/dist/commands/selectnodeforward.d.ts","./node_modules/@tiptap/core/dist/commands/selectparentnode.d.ts","./node_modules/@tiptap/core/dist/commands/selecttextblockend.d.ts","./node_modules/@tiptap/core/dist/commands/selecttextblockstart.d.ts","./node_modules/@tiptap/core/dist/commands/setcontent.d.ts","./node_modules/@tiptap/core/dist/commands/setmark.d.ts","./node_modules/@tiptap/core/dist/commands/setmeta.d.ts","./node_modules/@tiptap/core/dist/commands/setnode.d.ts","./node_modules/@tiptap/core/dist/commands/setnodeselection.d.ts","./node_modules/@tiptap/core/dist/commands/settextselection.d.ts","./node_modules/@tiptap/core/dist/commands/sinklistitem.d.ts","./node_modules/@tiptap/core/dist/commands/splitblock.d.ts","./node_modules/@tiptap/core/dist/commands/splitlistitem.d.ts","./node_modules/@tiptap/core/dist/commands/togglelist.d.ts","./node_modules/@tiptap/core/dist/commands/togglemark.d.ts","./node_modules/@tiptap/core/dist/commands/togglenode.d.ts","./node_modules/@tiptap/core/dist/commands/togglewrap.d.ts","./node_modules/@tiptap/core/dist/commands/undoinputrule.d.ts","./node_modules/@tiptap/core/dist/commands/unsetallmarks.d.ts","./node_modules/@tiptap/core/dist/commands/unsetmark.d.ts","./node_modules/@tiptap/core/dist/commands/updateattributes.d.ts","./node_modules/@tiptap/core/dist/commands/wrapin.d.ts","./node_modules/@tiptap/core/dist/commands/wrapinlist.d.ts","./node_modules/@tiptap/core/dist/commands/index.d.ts","./node_modules/@tiptap/core/dist/extensions/commands.d.ts","./node_modules/@tiptap/core/dist/extensions/drop.d.ts","./node_modules/@tiptap/core/dist/extensions/editable.d.ts","./node_modules/@tiptap/core/dist/extensions/focusevents.d.ts","./node_modules/@tiptap/core/dist/extensions/keymap.d.ts","./node_modules/@tiptap/core/dist/extensions/paste.d.ts","./node_modules/@tiptap/core/dist/extensions/tabindex.d.ts","./node_modules/@tiptap/core/dist/extensions/index.d.ts","./node_modules/@tiptap/core/dist/editor.d.ts","./node_modules/@tiptap/core/dist/commandmanager.d.ts","./node_modules/@tiptap/core/dist/helpers/combinetransactionsteps.d.ts","./node_modules/@tiptap/core/dist/helpers/createchainablestate.d.ts","./node_modules/@tiptap/core/dist/helpers/createdocument.d.ts","./node_modules/@tiptap/core/dist/helpers/createnodefromcontent.d.ts","./node_modules/@tiptap/core/dist/helpers/defaultblockat.d.ts","./node_modules/@tiptap/core/dist/helpers/findchildren.d.ts","./node_modules/@tiptap/core/dist/helpers/findchildreninrange.d.ts","./node_modules/@tiptap/core/dist/helpers/findparentnode.d.ts","./node_modules/@tiptap/core/dist/helpers/findparentnodeclosesttopos.d.ts","./node_modules/@tiptap/core/dist/helpers/generatehtml.d.ts","./node_modules/@tiptap/core/dist/helpers/generatejson.d.ts","./node_modules/@tiptap/core/dist/helpers/generatetext.d.ts","./node_modules/@tiptap/core/dist/helpers/getattributes.d.ts","./node_modules/@tiptap/core/dist/helpers/getattributesfromextensions.d.ts","./node_modules/@tiptap/core/dist/helpers/getchangedranges.d.ts","./node_modules/@tiptap/core/dist/helpers/getdebugjson.d.ts","./node_modules/@tiptap/core/dist/helpers/getextensionfield.d.ts","./node_modules/@tiptap/core/dist/helpers/gethtmlfromfragment.d.ts","./node_modules/@tiptap/core/dist/helpers/getmarkattributes.d.ts","./node_modules/@tiptap/core/dist/helpers/getmarkrange.d.ts","./node_modules/@tiptap/core/dist/helpers/getmarksbetween.d.ts","./node_modules/@tiptap/core/dist/helpers/getmarktype.d.ts","./node_modules/@tiptap/core/dist/helpers/getnodeatposition.d.ts","./node_modules/@tiptap/core/dist/helpers/getnodeattributes.d.ts","./node_modules/@tiptap/core/dist/helpers/getnodetype.d.ts","./node_modules/@tiptap/core/dist/helpers/getrenderedattributes.d.ts","./node_modules/@tiptap/core/dist/helpers/getschema.d.ts","./node_modules/@tiptap/core/dist/helpers/getschemabyresolvedextensions.d.ts","./node_modules/@tiptap/core/dist/helpers/getschematypebyname.d.ts","./node_modules/@tiptap/core/dist/helpers/getschematypenamebyname.d.ts","./node_modules/@tiptap/core/dist/helpers/getsplittedattributes.d.ts","./node_modules/@tiptap/core/dist/helpers/gettext.d.ts","./node_modules/@tiptap/core/dist/helpers/gettextbetween.d.ts","./node_modules/@tiptap/core/dist/helpers/gettextcontentfromnodes.d.ts","./node_modules/@tiptap/core/dist/helpers/gettextserializersfromschema.d.ts","./node_modules/@tiptap/core/dist/helpers/injectextensionattributestoparserule.d.ts","./node_modules/@tiptap/core/dist/helpers/isactive.d.ts","./node_modules/@tiptap/core/dist/helpers/isatendofnode.d.ts","./node_modules/@tiptap/core/dist/helpers/isatstartofnode.d.ts","./node_modules/@tiptap/core/dist/helpers/isextensionrulesenabled.d.ts","./node_modules/@tiptap/core/dist/helpers/islist.d.ts","./node_modules/@tiptap/core/dist/helpers/ismarkactive.d.ts","./node_modules/@tiptap/core/dist/helpers/isnodeactive.d.ts","./node_modules/@tiptap/core/dist/helpers/isnodeempty.d.ts","./node_modules/@tiptap/core/dist/helpers/isnodeselection.d.ts","./node_modules/@tiptap/core/dist/helpers/istextselection.d.ts","./node_modules/@tiptap/core/dist/helpers/postodomrect.d.ts","./node_modules/@tiptap/core/dist/helpers/resolvefocusposition.d.ts","./node_modules/@tiptap/core/dist/helpers/rewriteunknowncontent.d.ts","./node_modules/@tiptap/core/dist/helpers/selectiontoinsertionend.d.ts","./node_modules/@tiptap/core/dist/helpers/splitextensions.d.ts","./node_modules/@tiptap/core/dist/helpers/index.d.ts","./node_modules/@tiptap/core/dist/inputrules/markinputrule.d.ts","./node_modules/@tiptap/core/dist/inputrules/nodeinputrule.d.ts","./node_modules/@tiptap/core/dist/inputrules/textblocktypeinputrule.d.ts","./node_modules/@tiptap/core/dist/inputrules/textinputrule.d.ts","./node_modules/@tiptap/core/dist/inputrules/wrappinginputrule.d.ts","./node_modules/@tiptap/core/dist/inputrules/index.d.ts","./node_modules/@tiptap/core/dist/nodeview.d.ts","./node_modules/@tiptap/core/dist/pasterules/markpasterule.d.ts","./node_modules/@tiptap/core/dist/pasterules/nodepasterule.d.ts","./node_modules/@tiptap/core/dist/pasterules/textpasterule.d.ts","./node_modules/@tiptap/core/dist/pasterules/index.d.ts","./node_modules/@tiptap/core/dist/tracker.d.ts","./node_modules/@tiptap/core/dist/utilities/callorreturn.d.ts","./node_modules/@tiptap/core/dist/utilities/caninsertnode.d.ts","./node_modules/@tiptap/core/dist/utilities/createstyletag.d.ts","./node_modules/@tiptap/core/dist/utilities/deleteprops.d.ts","./node_modules/@tiptap/core/dist/utilities/elementfromstring.d.ts","./node_modules/@tiptap/core/dist/utilities/escapeforregex.d.ts","./node_modules/@tiptap/core/dist/utilities/findduplicates.d.ts","./node_modules/@tiptap/core/dist/utilities/fromstring.d.ts","./node_modules/@tiptap/core/dist/utilities/isemptyobject.d.ts","./node_modules/@tiptap/core/dist/utilities/isfunction.d.ts","./node_modules/@tiptap/core/dist/utilities/isios.d.ts","./node_modules/@tiptap/core/dist/utilities/ismacos.d.ts","./node_modules/@tiptap/core/dist/utilities/isnumber.d.ts","./node_modules/@tiptap/core/dist/utilities/isplainobject.d.ts","./node_modules/@tiptap/core/dist/utilities/isregexp.d.ts","./node_modules/@tiptap/core/dist/utilities/issafari.d.ts","./node_modules/@tiptap/core/dist/utilities/isstring.d.ts","./node_modules/@tiptap/core/dist/utilities/mergeattributes.d.ts","./node_modules/@tiptap/core/dist/utilities/mergedeep.d.ts","./node_modules/@tiptap/core/dist/utilities/minmax.d.ts","./node_modules/@tiptap/core/dist/utilities/objectincludes.d.ts","./node_modules/@tiptap/core/dist/utilities/removeduplicates.d.ts","./node_modules/@tiptap/core/dist/utilities/index.d.ts","./node_modules/@tiptap/core/dist/index.d.ts","./node_modules/tippy.js/index.d.ts","./node_modules/@tiptap/extension-bubble-menu/dist/bubble-menu-plugin.d.ts","./node_modules/@tiptap/extension-bubble-menu/dist/bubble-menu.d.ts","./node_modules/@tiptap/extension-bubble-menu/dist/index.d.ts","./node_modules/@tiptap/vue-3/dist/bubblemenu.d.ts","./node_modules/@tiptap/vue-3/dist/editor.d.ts","./node_modules/@tiptap/vue-3/dist/editorcontent.d.ts","./node_modules/@tiptap/extension-floating-menu/dist/floating-menu-plugin.d.ts","./node_modules/@tiptap/extension-floating-menu/dist/floating-menu.d.ts","./node_modules/@tiptap/extension-floating-menu/dist/index.d.ts","./node_modules/@tiptap/vue-3/dist/floatingmenu.d.ts","./node_modules/@tiptap/vue-3/dist/nodeviewcontent.d.ts","./node_modules/@tiptap/vue-3/dist/nodeviewwrapper.d.ts","./node_modules/@tiptap/vue-3/dist/useeditor.d.ts","./node_modules/@tiptap/vue-3/dist/vuenodeviewrenderer.d.ts","./node_modules/@tiptap/vue-3/dist/vuerenderer.d.ts","./node_modules/@tiptap/vue-3/dist/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/messageinputstate/messageinputstate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/messageinputstate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/messageliststate/messageliststate.d.ts","./node_modules/tuikit-atomicx-vue3/dist/states/messageliststate/index.d.ts","./node_modules/tuikit-atomicx-vue3/dist/subentry/chat/chat.d.ts","./node_modules/tuikit-atomicx-vue3/dist/subentry/chat/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/constants/interface.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/node_modules/i18next/typescript/helpers.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/node_modules/i18next/typescript/options.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/node_modules/i18next/typescript/t.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/node_modules/i18next/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/node_modules/i18next/index.d.mts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/providers/uikitprovider/i18n/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/providers/uikitprovider/contexts/languageprovider/uselanguageprovider.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/providers/uikitprovider/contexts/languageprovider/languageprovider.vue.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/providers/uikitprovider/contexts/languageprovider/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/providers/uikitprovider/contexts/uikitprovider/uikitprovider.vue.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/providers/uikitprovider/contexts/uikitprovider/useuikitprovider.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/providers/uikitprovider/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/button/types.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/button/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/dialog/type.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/dialog/dialog.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/dialog/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/drawer/types.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/drawer/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/dropdown/types.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/dropdown/index.vue.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/dropdown/dropdownitem.vue.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/dropdown/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/icon/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/messagebox/i18n/en-us/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/messagebox/i18n/zh-cn/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/messagebox/i18n/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/messagebox/type.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/messagebox/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/badge/types.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/badge/index.vue.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/badge/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/input/types.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/input/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/select/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/option/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/switch/types.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/switch/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/slider/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/swiper/type.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/swiper/index.vue.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/swiper/swiperitem.vue.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/swiper/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/toast/type.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/toast/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/watermark/index.vue.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/watermark/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/popup/type.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/popup/index.vue.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/popup/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/hooks/usecomponent.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/hooks/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/utils/utils.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/components/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/directives/loading/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/directives/index.d.ts","./node_modules/@tencentcloud/uikit-base-component-vue3/dist/index.d.ts","./node_modules/@tencentcloud/chat-uikit-vue3/dist/index.d.ts","./src/components/sidetab.vue","./src/components/app-link/index.vue","./src/components/chat-dialog/chatmessageitem.vue","./src/utils/call-local-recorder.ts","./src/utils/call-video-screenshot.ts","./src/utils/tuicall-error.ts","./src/utils/im-call-hangup-detect.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/const/call.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/const/error.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/const/log.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/const/index.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/interface/icallservice.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/interface/icallstore.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/interface/ituiglobal.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/interface/ituistore.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/interface/index.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/callservice/uidesign.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/callservice/index.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/locales/index.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/tuicallservice/index.d.ts","./node_modules/@tencentcloud/call-uikit-vue/types/index.d.ts","./node_modules/@tencentcloud/call-engine-js/index.d.ts","./src/components/chat-dialog/index.vue","./src/components/color-picker/index.vue","./src/components/daterange-picker/index.vue","./src/components/del-wrap/index.vue","./src/components/dict-value/index.vue","./node_modules/@wangeditor/editor/dist/editor/src/utils/browser-polyfill.d.ts","./node_modules/@wangeditor/editor/dist/editor/src/utils/node-polyfill.d.ts","./node_modules/@wangeditor/editor/dist/editor/src/locale/index.d.ts","./node_modules/@wangeditor/editor/dist/editor/src/register-builtin-modules/index.d.ts","./node_modules/@wangeditor/editor/dist/editor/src/init-default-config/index.d.ts","./node_modules/slate/dist/create-editor.d.ts","./node_modules/slate/dist/interfaces/element.d.ts","./node_modules/slate/dist/interfaces/node.d.ts","./node_modules/slate/dist/interfaces/editor.d.ts","./node_modules/slate/dist/interfaces/location.d.ts","./node_modules/slate/dist/interfaces/operation.d.ts","./node_modules/slate/dist/interfaces/path.d.ts","./node_modules/slate/dist/interfaces/path-ref.d.ts","./node_modules/slate/dist/interfaces/point.d.ts","./node_modules/slate/dist/interfaces/point-ref.d.ts","./node_modules/slate/dist/interfaces/range.d.ts","./node_modules/slate/dist/interfaces/range-ref.d.ts","./node_modules/slate/dist/interfaces/custom-types.d.ts","./node_modules/slate/dist/interfaces/text.d.ts","./node_modules/slate/dist/transforms/general.d.ts","./node_modules/slate/dist/transforms/node.d.ts","./node_modules/slate/dist/transforms/selection.d.ts","./node_modules/slate/dist/transforms/text.d.ts","./node_modules/slate/dist/transforms/index.d.ts","./node_modules/slate/dist/index.d.ts","./node_modules/snabbdom/build/htmldomapi.d.ts","./node_modules/snabbdom/build/helpers/attachto.d.ts","./node_modules/snabbdom/build/modules/style.d.ts","./node_modules/snabbdom/build/modules/eventlisteners.d.ts","./node_modules/snabbdom/build/modules/attributes.d.ts","./node_modules/snabbdom/build/modules/class.d.ts","./node_modules/snabbdom/build/modules/props.d.ts","./node_modules/snabbdom/build/modules/dataset.d.ts","./node_modules/snabbdom/build/vnode.d.ts","./node_modules/snabbdom/build/hooks.d.ts","./node_modules/snabbdom/build/modules/module.d.ts","./node_modules/snabbdom/build/init.d.ts","./node_modules/snabbdom/build/thunk.d.ts","./node_modules/snabbdom/build/is.d.ts","./node_modules/snabbdom/build/tovnode.d.ts","./node_modules/snabbdom/build/h.d.ts","./node_modules/snabbdom/build/jsx.d.ts","./node_modules/snabbdom/build/index.d.ts","./node_modules/@types/event-emitter/index.d.ts","./node_modules/dom7/dom7.d.ts","./node_modules/@wangeditor/core/dist/core/src/utils/dom.d.ts","./node_modules/@wangeditor/core/dist/core/src/menus/interface.d.ts","./node_modules/@wangeditor/core/dist/core/src/config/interface.d.ts","./node_modules/@wangeditor/core/dist/core/src/editor/interface.d.ts","./node_modules/@wangeditor/core/dist/core/src/render/index.d.ts","./node_modules/@wangeditor/core/dist/core/src/to-html/index.d.ts","./node_modules/@wangeditor/core/dist/core/src/parse-html/index.d.ts","./node_modules/@wangeditor/core/dist/core/src/menus/bar/toolbar.d.ts","./node_modules/@wangeditor/core/dist/core/src/menus/register.d.ts","./node_modules/@wangeditor/core/dist/core/src/menus/panel-and-modal/baseclass.d.ts","./node_modules/@wangeditor/core/dist/core/src/menus/panel-and-modal/modal.d.ts","./node_modules/@wangeditor/core/dist/core/src/menus/index.d.ts","./node_modules/slate-history/dist/history.d.ts","./node_modules/slate-history/dist/history-editor.d.ts","./node_modules/slate-history/dist/with-history.d.ts","./node_modules/slate-history/dist/index.d.ts","./node_modules/@wangeditor/core/dist/core/src/create/create-editor.d.ts","./node_modules/@wangeditor/core/dist/core/src/create/create-toolbar.d.ts","./node_modules/@wangeditor/core/dist/core/src/create/index.d.ts","./node_modules/@wangeditor/core/dist/core/src/utils/key.d.ts","./node_modules/@wangeditor/core/dist/core/src/text-area/textarea.d.ts","./node_modules/@wangeditor/core/dist/core/src/menus/bar/hoverbar.d.ts","./node_modules/@wangeditor/core/dist/core/src/editor/dom-editor.d.ts","./node_modules/@uppy/utils/types/index.d.ts","./node_modules/@uppy/core/types/index.d.ts","./node_modules/@wangeditor/core/dist/core/src/upload/interface.d.ts","./node_modules/@wangeditor/core/dist/core/src/upload/createuploader.d.ts","./node_modules/@wangeditor/core/dist/core/src/upload/index.d.ts","./node_modules/i18next/index.d.ts","./node_modules/@wangeditor/core/dist/core/src/i18n/index.d.ts","./node_modules/@wangeditor/core/dist/core/src/index.d.ts","./node_modules/@wangeditor/editor/dist/editor/src/boot.d.ts","./node_modules/@wangeditor/editor/dist/editor/src/utils/dom.d.ts","./node_modules/@wangeditor/editor/dist/editor/src/create.d.ts","./node_modules/@wangeditor/editor/dist/editor/src/index.d.ts","./node_modules/vuedraggable/src/vuedraggable.d.ts","./src/components/popup/index.vue","./src/components/material/file.vue","./src/components/material/hook.ts","./src/components/material/preview.vue","./src/components/material/index.vue","./src/components/material/picker.vue","./src/components/editor/index.vue","./src/components/export-data/index.vue","./src/components/footer-btns/index.vue","./src/components/icon/index.ts","./src/components/icon/svg-icon.vue","./src/components/icon/index.vue","./src/components/icon/picker.vue","./src/components/image-contain/index.vue","./src/components/link/index.ts","./src/components/link/article-list.vue","./src/components/link/custom-link.vue","./src/components/link/mini-program.vue","./src/components/link/shop-pages.vue","./src/components/link/index.vue","./src/components/link/picker.vue","./src/components/overflow-tooltip/index.vue","./src/components/pagination/index.vue","./src/components/popover-input/index.vue","./src/components/upload/index.vue","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/const/call.d.ts","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/const/error.d.ts","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/const/log.d.ts","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/const/index.d.ts","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/interface/icallservice.d.ts","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/interface/icallstore.d.ts","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/interface/ituiglobal.d.ts","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/interface/ituistore.d.ts","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/interface/index.d.ts","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/callservice/uidesign.d.ts","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/callservice/index.d.ts","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/locales/index.d.ts","./node_modules/@trtc/calls-uikit-vue/types/tuicallservice/index.d.ts","./node_modules/@trtc/calls-uikit-vue/types/index.d.ts","./src/components/video-call/index.vue","./src/hooks/usedictoptions.ts","./node_modules/vue-clipboard3/dist/esm/index.d.ts","./src/install/directives/copy.ts","./src/install/directives/perms.ts","./node_modules/echarts/types/dist/shared.d.ts","./node_modules/echarts/types/dist/charts.d.ts","./node_modules/echarts/charts.d.ts","./node_modules/echarts/types/dist/components.d.ts","./node_modules/echarts/components.d.ts","./node_modules/echarts/types/dist/core.d.ts","./node_modules/echarts/core.d.ts","./node_modules/echarts/types/dist/features.d.ts","./node_modules/echarts/features.d.ts","./node_modules/echarts/types/dist/renderers.d.ts","./node_modules/echarts/renderers.d.ts","./src/install/plugins/echart.ts","./node_modules/element-plus/es/components/base/style/css.d.ts","./node_modules/element-plus/es/components/overlay/style/css.d.ts","./node_modules/element-plus/es/components/dialog/style/css.d.ts","./src/install/plugins/element.ts","./node_modules/@highlightjs/vue-plugin/dist/vue.d.ts","./node_modules/highlight.js/types/index.d.ts","./src/install/plugins/hljs.ts","./src/stores/index.ts","./src/install/plugins/pinia.ts","./src/router/guard/index.ts","./src/install/plugins/router.ts","./src/install/plugins/tuikit.ts","./src/router/guard/init.ts","./src/utils/checkhttps.ts","./src/utils/env.ts","./src/utils/getexposetype.ts","./src/views/app/recharge/index.vue","./src/views/article/column/edit.vue","./src/views/article/column/index.vue","./src/views/article/lists/edit.vue","./src/views/article/lists/index.vue","./src/views/channel/h5.vue","./src/views/channel/open_setting.vue","./src/views/channel/weapp.vue","./src/views/channel/wx_oa/config.vue","./src/views/channel/wx_oa/menu_com/usemenuoa.ts","./src/views/channel/wx_oa/menu_com/oa-menu-form.vue","./src/views/channel/wx_oa/menu_com/oa-menu-form-edit.vue","./src/views/channel/wx_oa/menu_com/oa-attr.vue","./src/views/channel/wx_oa/menu_com/oa-phone.vue","./src/views/channel/wx_oa/menu.vue","./src/views/channel/wx_oa/reply/edit.vue","./src/views/channel/wx_oa/reply/default_reply.vue","./src/views/channel/wx_oa/reply/follow_reply.vue","./src/views/channel/wx_oa/reply/keyword_reply.vue","./src/views/chat/components/messagebubble.vue","./src/views/chat/components/sendpanel.vue","./src/views/chat/index.vue","./src/views/consumer/assistant/edit.vue","./src/views/consumer/assistant/index.vue","./src/views/consumer/components/account-adjust.vue","./src/views/consumer/doctor/edit.vue","./src/views/consumer/doctor/index.vue","./src/views/consumer/doctor/paiban.vue","./src/views/consumer/lists/detail.vue","./src/views/consumer/lists/index.vue","./src/views/consumer/prescription/index.vue","./src/views/consumer/prescription/list.vue","./src/views/consumer/prescription/order_list.vue","./src/views/decoration/pc.vue","./src/views/decoration/component/pages/menu.vue","./src/views/decoration/component/tabbar/mobile/attr.vue","./src/views/decoration/component/decoration-img.vue","./src/views/decoration/component/tabbar/mobile/content.vue","./src/views/decoration/component/tabbar/mobile/index.ts","./src/views/decoration/tabbar.vue","./src/views/decoration/component/add-nav.vue","./src/views/decoration/component/pages/attr-setting.vue","./src/views/decoration/component/pages/preview.vue","./src/views/decoration/component/tabbar/pc/menu-set.vue","./src/views/decoration/component/tabbar/pc/attr.vue","./src/views/decoration/component/tabbar/pc/content.vue","./src/views/decoration/component/tabbar/pc/index.ts","./src/views/decoration/component/widgets/banner/options.ts","./src/views/decoration/component/widgets/banner/attr.vue","./src/views/decoration/component/widgets/banner/content.vue","./src/views/decoration/component/widgets/banner/index.ts","./src/views/decoration/component/widgets/customer-service/options.ts","./src/views/decoration/component/widgets/customer-service/attr.vue","./src/views/decoration/component/widgets/customer-service/content.vue","./src/views/decoration/component/widgets/customer-service/index.ts","./src/views/decoration/component/widgets/middle-banner/options.ts","./src/views/decoration/component/widgets/middle-banner/attr.vue","./src/views/decoration/component/widgets/middle-banner/content.vue","./src/views/decoration/component/widgets/middle-banner/index.ts","./src/views/decoration/component/widgets/my-service/options.ts","./src/views/decoration/component/widgets/my-service/attr.vue","./src/views/decoration/component/widgets/my-service/content.vue","./src/views/decoration/component/widgets/my-service/index.ts","./src/views/decoration/component/widgets/nav/options.ts","./src/views/decoration/component/widgets/nav/attr.vue","./src/views/decoration/component/widgets/nav/content.vue","./src/views/decoration/component/widgets/nav/index.ts","./src/views/decoration/component/widgets/news/options.ts","./src/views/decoration/component/widgets/news/attr.vue","./src/views/decoration/component/widgets/news/content.vue","./src/views/decoration/component/widgets/news/index.ts","./src/views/decoration/component/widgets/page-meta/options.ts","./src/views/decoration/component/widgets/page-meta/attr.vue","./src/views/decoration/component/widgets/page-meta/content.vue","./src/views/decoration/component/widgets/page-meta/index.ts","./src/views/decoration/component/widgets/pc-banner/options.ts","./src/views/decoration/component/widgets/pc-banner/content.vue","./src/views/decoration/component/widgets/pc-banner/index.ts","./src/views/decoration/component/widgets/search/options.ts","./src/views/decoration/component/widgets/search/attr.vue","./src/views/decoration/component/widgets/search/content.vue","./src/views/decoration/component/widgets/search/index.ts","./src/views/decoration/component/widgets/user-banner/options.ts","./src/views/decoration/component/widgets/user-banner/attr.vue","./src/views/decoration/component/widgets/user-banner/content.vue","./src/views/decoration/component/widgets/user-banner/index.ts","./src/views/decoration/component/widgets/user-info/options.ts","./src/views/decoration/component/widgets/user-info/attr.vue","./src/views/decoration/component/widgets/user-info/content.vue","./src/views/decoration/component/widgets/user-info/index.ts","./src/views/decoration/pages/index.vue","./src/views/decoration/style/components/theme-picker.vue","./src/views/decoration/style/components/mobile-style.vue","./src/views/decoration/style/style.vue","./src/views/dev_tools/components/relations-add.vue","./src/views/dev_tools/code/edit.vue","./src/views/dev_tools/components/code-preview.vue","./src/views/dev_tools/components/data-table.vue","./src/views/dev_tools/code/index.vue","./src/views/doctor/dept-tongji.vue","./src/views/doctor/medicine.vue","./src/views/doctor/roster.vue","./src/views/doctor/tongji.vue","./src/views/fans/index.vue","./src/views/fans/qywx.vue","./src/views/finance/balance_details.vue","./src/views/finance/recharge_record.vue","./src/views/finance/component/refund-log.vue","./src/views/finance/refund_record.vue","./src/views/finance/account_cost/edit.vue","./src/views/finance/account_cost/index.vue","./src/views/material/index.vue","./src/views/message/notice/edit.vue","./src/views/message/notice/index.vue","./src/views/message/short_letter/edit.vue","./src/views/message/short_letter/index.vue","./src/views/order/index.vue","./src/views/organization/department/edit.vue","./src/views/organization/department/index.vue","./src/views/organization/post/edit.vue","./src/views/organization/post/index.vue","./src/views/patient/reception/index.vue","./src/views/permission/admin/edit.vue","./src/views/permission/admin/index.vue","./src/views/permission/menu/edit.vue","./src/views/permission/menu/index.vue","./src/views/permission/role/auth.vue","./src/views/permission/role/edit.vue","./src/views/permission/role/index.vue","./src/views/setting/dict/data/edit.vue","./src/views/setting/dict/data/index.vue","./src/views/setting/dict/type/edit.vue","./src/views/setting/dict/type/index.vue","./src/views/setting/pay/config/edit.vue","./src/views/setting/pay/config/index.vue","./src/views/setting/pay/method/index.vue","./src/views/setting/search/index.vue","./src/views/setting/storage/edit.vue","./src/views/setting/storage/index.vue","./src/views/setting/system/cache.vue","./src/views/setting/system/environment.vue","./src/views/setting/system/journal.vue","./src/views/setting/system/scheduled_task/edit.vue","./src/views/setting/system/scheduled_task/index.vue","./src/views/setting/user/login_register.vue","./src/views/setting/user/setup.vue","./src/views/setting/website/filing.vue","./src/views/setting/website/information.vue","./src/views/setting/website/protocol.vue","./src/views/setting/website/statistics.vue","./node_modules/vue-echarts/node_modules/vue-demi/lib/index.d.ts","./node_modules/vue-echarts/dist/index.d.ts","./src/views/stats/conversion/index.vue","./src/views/tcm/appointment/list.vue","./src/views/tcm/appointment/components/prescription-drawer.vue","./src/views/tcm/diagnosis/add.vue","./src/views/tcm/diagnosis/index.vue","./src/views/tcm/follow/index.vue","./src/views/template/component/file.vue","./src/views/template/component/icon.vue","./src/views/template/component/link.vue","./src/views/template/component/overflow.vue","./src/views/template/component/popover_input.vue","./src/views/template/component/rich_text.vue","./src/views/template/component/upload.vue","./src/views/test/patient-call.vue","./src/views/workbench/index.vue","./components.d.ts","./auto-imports.d.ts","./typings/index.d.ts","./typings/router.d.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/web-globals/navigator.d.ts","./node_modules/@types/node/web-globals/storage.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/sqlite.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/@types/estree/index.d.ts","./node_modules/rollup/dist/rollup.d.ts","./node_modules/rollup/dist/parseast.d.ts","./node_modules/vite/dist/node/modulerunnertransport.d-dj_me5sf.d.ts","./node_modules/vite/dist/node/module-runner.d.ts","./node_modules/esbuild/lib/main.d.ts","./node_modules/source-map-js/source-map.d.ts","./node_modules/postcss/lib/previous-map.d.ts","./node_modules/postcss/lib/input.d.ts","./node_modules/postcss/lib/css-syntax-error.d.ts","./node_modules/postcss/lib/declaration.d.ts","./node_modules/postcss/lib/root.d.ts","./node_modules/postcss/lib/warning.d.ts","./node_modules/postcss/lib/lazy-result.d.ts","./node_modules/postcss/lib/no-work-result.d.ts","./node_modules/postcss/lib/processor.d.ts","./node_modules/postcss/lib/result.d.ts","./node_modules/postcss/lib/document.d.ts","./node_modules/postcss/lib/rule.d.ts","./node_modules/postcss/lib/node.d.ts","./node_modules/postcss/lib/comment.d.ts","./node_modules/postcss/lib/container.d.ts","./node_modules/postcss/lib/at-rule.d.ts","./node_modules/postcss/lib/list.d.ts","./node_modules/postcss/lib/postcss.d.ts","./node_modules/postcss/lib/postcss.d.mts","./node_modules/vite/types/internal/lightningcssoptions.d.ts","./node_modules/sass/types/deprecations.d.ts","./node_modules/sass/types/util/promise_or.d.ts","./node_modules/sass/types/importer.d.ts","./node_modules/sass/types/logger/source_location.d.ts","./node_modules/sass/types/logger/source_span.d.ts","./node_modules/sass/types/logger/index.d.ts","./node_modules/immutable/dist/immutable.d.ts","./node_modules/sass/types/value/boolean.d.ts","./node_modules/sass/types/value/calculation.d.ts","./node_modules/sass/types/value/color.d.ts","./node_modules/sass/types/value/function.d.ts","./node_modules/sass/types/value/list.d.ts","./node_modules/sass/types/value/map.d.ts","./node_modules/sass/types/value/mixin.d.ts","./node_modules/sass/types/value/number.d.ts","./node_modules/sass/types/value/string.d.ts","./node_modules/sass/types/value/argument_list.d.ts","./node_modules/sass/types/value/index.d.ts","./node_modules/sass/types/options.d.ts","./node_modules/sass/types/compile.d.ts","./node_modules/sass/types/exception.d.ts","./node_modules/sass/types/legacy/exception.d.ts","./node_modules/sass/types/legacy/plugin_this.d.ts","./node_modules/sass/types/legacy/function.d.ts","./node_modules/sass/types/legacy/importer.d.ts","./node_modules/sass/types/legacy/options.d.ts","./node_modules/sass/types/legacy/render.d.ts","./node_modules/sass/types/index.d.ts","./node_modules/vite/types/internal/csspreprocessoroptions.d.ts","./node_modules/vite/types/metadata.d.ts","./node_modules/vite/dist/node/index.d.ts","./node_modules/magic-string/dist/magic-string.es.d.mts","./node_modules/typescript/lib/typescript.d.ts","./node_modules/@vue/compiler-sfc/dist/compiler-sfc.d.ts","./node_modules/vue/compiler-sfc/index.d.mts","./node_modules/@vitejs/plugin-vue/dist/index.d.mts","./node_modules/@vue/babel-plugin-resolve-type/dist/index.d.mts","./node_modules/@vue/babel-plugin-jsx/dist/index.d.mts","./node_modules/@vitejs/plugin-vue-jsx/dist/index.d.mts","./node_modules/mlly/dist/index.d.ts","./node_modules/unimport/dist/shared/unimport.cavrr9sh.d.mts","./node_modules/unimport/dist/shared/unimport.czoa5cgj.d.mts","./node_modules/strip-literal/node_modules/js-tokens/index.d.ts","./node_modules/strip-literal/dist/index.d.mts","./node_modules/unimport/dist/index.d.mts","./node_modules/unplugin-utils/dist/index.d.ts","./node_modules/unplugin-auto-import/dist/types-bch7f5uk.d.ts","./node_modules/unplugin-auto-import/dist/vite.d.ts","./node_modules/webpack-virtual-modules/lib/index.d.ts","./node_modules/unplugin/dist/index.d.ts","./node_modules/unplugin-vue-components/dist/types-cfwifa2k.d.ts","./node_modules/unplugin-vue-components/dist/resolvers.d.ts","./node_modules/unplugin-vue-components/dist/vite.d.ts","./node_modules/vite-plugin-style-import/dist/index.d.ts","./node_modules/@types/svgo/index.d.ts","./node_modules/vite-plugin-svg-icons/dist/index.d.ts","./node_modules/vite-plugin-vue-setup-extend/dist/index.d.ts","./vite.config.ts"],"fileIdsList":[[103,107,113,2315,2318,2324,2372,2389,2390],[103,107,113,1104,1447,1523,1556,1968,1969,1970,1990,1991,1992,1993,1994,2076,2077,2079,2080,2081,2082,2083,2084,2086,2087,2088,2089,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2115,2318,2324,2372,2389,2390],[92,2324,2372,2389,2390],[103,104,107,113,2315,2324,2372,2389,2390],[95,2324,2372,2389,2390],[2324,2372,2389,2390],[740,2324,2372,2389,2390],[741,2324,2372,2389,2390],[740,741,742,743,744,745,746,747,748,2324,2372,2389,2390],[103,107,113,2315,2324,2372,2389,2390],[1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,2324,2372,2389,2390],[1412,2324,2372,2389,2390],[632,2324,2372,2389,2390],[633,634,2324,2372,2389,2390],[524,2324,2372,2389,2390],[518,520,2324,2372,2389,2390],[508,518,519,521,522,523,2324,2372,2389,2390],[518,2324,2372,2389,2390],[508,518,2324,2372,2389,2390],[509,510,511,512,513,514,515,516,517,2324,2372,2389,2390],[509,513,514,517,518,521,2324,2372,2389,2390],[509,510,511,512,513,514,515,516,517,518,519,521,522,2324,2372,2389,2390],[508,509,510,511,512,513,514,515,516,517,2324,2372,2389,2390],[1610,2324,2372,2389,2390],[1987,2324,2372,2389,2390],[1978,1979,1983,1984,2324,2372,2389,2390],[1978,2324,2372,2389,2390],[1975,1976,1977,2324,2372,2389,2390],[1978,1985,1986,2324,2372,2389,2390],[1978,1983,2324,2372,2389,2390],[1979,1980,1981,1982,2324,2372,2389,2390],[1585,2324,2372,2389,2390],[1587,1588,2324,2372,2389,2390],[1586,1589,1908,1966,2324,2372,2389,2390],[1607,2324,2372,2389,2390],[103,107,113,1939,1940,2315,2324,2372,2389,2390],[103,107,113,1939,2315,2324,2372,2389,2390],[103,107,113,1922,2315,2324,2372,2389,2390],[103,107,113,1924,2315,2324,2372,2389,2390],[103,107,113,1924,1925,2315,2324,2372,2389,2390],[1922,2324,2372,2389,2390],[103,107,113,1927,2315,2324,2372,2389,2390],[103,107,113,1929,2315,2324,2372,2389,2390],[103,107,113,1929,1930,1931,2315,2324,2372,2389,2390],[1960,2324,2372,2389,2390],[1923,1926,1928,1932,1933,1938,1941,1943,1944,1945,1947,1948,1952,1954,1956,1959,1961,1962,2324,2372,2389,2390],[103,107,113,1942,2315,2324,2372,2389,2390],[1934,1935,2324,2372,2389,2390],[1936,1937,2324,2372,2389,2390],[1957,1958,2324,2372,2389,2390],[103,107,113,1957,2315,2324,2372,2389,2390],[1949,1950,1951,2324,2372,2389,2390],[103,107,113,1949,2315,2324,2372,2389,2390],[103,107,113,1946,2315,2324,2372,2389,2390],[103,107,113,1953,2315,2324,2372,2389,2390],[103,107,113,1955,2315,2324,2372,2389,2390],[103,107,113,1964,2315,2324,2372,2389,2390],[1915,1921,1963,1965,2324,2372,2389,2390],[1916,1917,2324,2372,2389,2390],[103,107,113,1916,2315,2324,2372,2389,2390],[103,107,113,1914,1915,2315,2324,2372,2389,2390],[103,107,113,1909,1918,2315,2324,2372,2389,2390],[103,107,113,1909,1914,2315,2324,2372,2389,2390],[1914,2324,2372,2389,2390],[1919,1920,2324,2372,2389,2390],[1910,1911,1912,1913,2324,2372,2389,2390],[1910,1911,1912,2324,2372,2389,2390],[1910,2324,2372,2389,2390],[1910,1911,2324,2372,2389,2390],[1718,1728,1796,2324,2372,2389,2390],[1725,1726,1727,1728,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1719,1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1719,1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,2324,2372,2389,2390],[1719,1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1719,1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1719,1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1719,1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1719,1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1719,1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1719,1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1718,1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1719,1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1719,1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1719,1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1719,1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1719,1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1719,1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1719,1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1719,1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1784,1785,1786,1885,2324,2372,2389,2390],[1719,1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1785,1786,1885,2324,2372,2389,2390],[1719,1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1786,1885,2324,2372,2389,2390],[1719,1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1885,2324,2372,2389,2390],[1718,1719,1720,1721,1728,1729,1730,1795,2324,2372,2389,2390],[1718,1723,1724,1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1796,1885,2324,2372,2389,2390],[1718,1719,1720,1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1796,1885,2324,2372,2389,2390],[1727,2324,2372,2389,2390],[1727,1787,2324,2372,2389,2390],[1718,1727,2324,2372,2389,2390],[1731,1788,1789,1790,1791,1792,1793,1794,2324,2372,2389,2390],[1718,1719,1722,2324,2372,2389,2390],[1718,2324,2372,2389,2390],[1719,1728,2324,2372,2389,2390],[1719,2324,2372,2389,2390],[1714,1718,1728,2324,2372,2389,2390],[1728,2324,2372,2389,2390],[1718,1719,2324,2372,2389,2390],[1722,1728,2324,2372,2389,2390],[1719,1728,1796,2324,2372,2389,2390],[1719,1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2324,2372,2389,2390],[1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,2324,2372,2389,2390],[1720,2324,2372,2389,2390],[1718,1719,1728,2324,2372,2389,2390],[1725,1726,1727,1728,2324,2372,2389,2390],[1723,1724,1725,1726,1727,1728,1730,1795,1796,1797,1849,1855,1856,1860,1861,1884,2324,2372,2389,2390],[1850,1851,1852,1853,1854,2324,2372,2389,2390],[1719,1723,1728,2324,2372,2389,2390],[1723,2324,2372,2389,2390],[1719,1723,1728,1796,2324,2372,2389,2390],[1718,1719,1723,1724,1725,1726,1727,1728,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1796,1885,2324,2372,2389,2390],[1720,1728,1796,2324,2372,2389,2390],[1857,1858,1859,2324,2372,2389,2390],[1719,1724,1728,2324,2372,2389,2390],[1724,2324,2372,2389,2390],[1718,1719,1720,1722,1725,1726,1727,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1796,1885,2324,2372,2389,2390],[1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,2324,2372,2389,2390],[1718,1720,1725,1726,1727,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,1886,2324,2372,2389,2390],[1725,1726,1727,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,1887,2324,2372,2389,2390],[1887,1888,2324,2372,2389,2390],[1725,1726,1727,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,1893,2324,2372,2389,2390],[1893,1894,2324,2372,2389,2390],[1714,2324,2372,2389,2390],[1717,2324,2372,2389,2390],[1715,2324,2372,2389,2390],[1716,2324,2372,2389,2390],[103,107,113,1716,1717,1725,1726,1727,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,1886,1889,2315,2324,2372,2389,2390],[103,107,113,1718,1725,1726,1727,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2315,2324,2372,2389,2390],[103,107,113,1891,2315,2324,2372,2389,2390],[103,107,113,1716,1717,1725,1726,1727,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,1886,1895,2315,2324,2372,2389,2390],[1725,1726,1727,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,1890,1891,1892,1896,1897,1898,1899,1900,1901,2324,2372,2389,2390],[103,107,113,1725,1726,1727,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,1891,2315,2324,2372,2389,2390],[103,107,113,1719,1720,1725,1726,1727,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1885,2315,2324,2372,2389,2390],[2113,2324,2372,2389,2390],[2104,2105,2109,2110,2324,2372,2389,2390],[2104,2324,2372,2389,2390],[2101,2102,2103,2324,2372,2389,2390],[2104,2111,2112,2324,2372,2389,2390],[2104,2109,2324,2372,2389,2390],[2105,2106,2107,2108,2324,2372,2389,2390],[127,2324,2372,2389,2390],[179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,2324,2372,2389,2390],[115,117,118,119,120,121,122,123,124,125,126,127,2324,2372,2389,2390],[115,116,118,119,120,121,122,123,124,125,126,127,2324,2372,2389,2390],[116,117,118,119,120,121,122,123,124,125,126,127,2324,2372,2389,2390],[115,116,117,119,120,121,122,123,124,125,126,127,2324,2372,2389,2390],[115,116,117,118,120,121,122,123,124,125,126,127,2324,2372,2389,2390],[115,116,117,118,119,121,122,123,124,125,126,127,2324,2372,2389,2390],[115,116,117,118,119,120,122,123,124,125,126,127,2324,2372,2389,2390],[115,116,117,118,119,120,121,123,124,125,126,127,2324,2372,2389,2390],[115,116,117,118,119,120,121,122,124,125,126,127,2324,2372,2389,2390],[115,116,117,118,119,120,121,122,123,125,126,127,2324,2372,2389,2390],[115,116,117,118,119,120,121,122,123,124,126,127,2324,2372,2389,2390],[115,116,117,118,119,120,121,122,123,124,125,127,2324,2372,2389,2390],[115,116,117,118,119,120,121,122,123,124,125,126,2324,2372,2389,2390],[2324,2369,2370,2372,2389,2390],[2324,2371,2372,2389,2390],[2372,2389,2390],[2324,2372,2377,2389,2390,2407],[2324,2372,2373,2378,2383,2389,2390,2392,2404,2415],[2324,2372,2373,2374,2383,2389,2390,2392],[2319,2320,2321,2324,2372,2389,2390],[2324,2372,2375,2389,2390,2416],[2324,2372,2376,2377,2384,2389,2390,2393],[2324,2372,2377,2389,2390,2404,2412],[2324,2372,2378,2380,2383,2389,2390,2392],[2324,2371,2372,2379,2389,2390],[2324,2372,2380,2381,2389,2390],[2324,2372,2382,2383,2389,2390],[2324,2371,2372,2383,2389,2390],[2324,2372,2383,2384,2385,2389,2390,2404,2415],[2324,2372,2383,2384,2385,2389,2390,2399,2404,2407],[2324,2365,2372,2380,2383,2386,2389,2390,2392,2404,2415],[2324,2372,2383,2384,2386,2387,2389,2390,2392,2404,2412,2415],[2324,2372,2386,2388,2389,2390,2404,2412,2415],[2322,2323,2324,2325,2326,2327,2328,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2392,2393,2394,2395,2396,2397,2398,2399,2400,2401,2402,2403,2404,2405,2406,2407,2408,2409,2410,2411,2412,2413,2414,2415,2416,2417,2418,2419,2420,2421],[2324,2372,2383,2389,2390],[2324,2372,2389,2390,2391,2415],[2324,2372,2380,2383,2389,2390,2392,2404],[2324,2372,2389,2390,2393],[2324,2372,2389,2390,2394],[2324,2371,2372,2389,2390,2395],[2324,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2392,2393,2394,2395,2396,2397,2398,2399,2400,2401,2402,2403,2404,2405,2406,2407,2408,2409,2410,2411,2412,2413,2414,2415,2416,2417,2418,2419,2420,2421],[2324,2372,2389,2390,2397],[2324,2372,2389,2390,2398],[2324,2372,2383,2389,2390,2399,2400],[2324,2372,2389,2390,2399,2401,2416,2418],[2324,2372,2384,2389,2390],[2324,2372,2383,2389,2390,2404,2405,2407],[2324,2372,2389,2390,2406,2407],[2324,2372,2389,2390,2404,2405],[2324,2372,2389,2390,2407],[2324,2372,2389,2390,2408],[2324,2369,2372,2389,2390,2404,2409,2415],[2324,2372,2383,2389,2390,2410,2411],[2324,2372,2389,2390,2410,2411],[2324,2372,2377,2389,2390,2392,2404,2412],[2324,2372,2389,2390,2413],[2324,2372,2389,2390,2392,2414],[2324,2372,2386,2389,2390,2398,2415],[2324,2372,2377,2389,2390,2416],[2324,2372,2389,2390,2404,2417],[2324,2372,2389,2390,2391,2418],[2324,2372,2389,2390,2419],[2324,2365,2372,2389,2390],[2324,2365,2372,2383,2385,2389,2390,2395,2404,2407,2415,2417,2418,2420],[2324,2372,2389,2390,2404,2421],[2324,2372,2389,2390,2422],[2063,2324,2372,2389,2390],[2324,2372,2389,2390,2480,2487],[2324,2372,2389,2390,2480,2484],[95,2324,2372,2389,2390,2486],[2324,2372,2389,2390,2483],[94,95,96,2324,2372,2389,2390],[97,2324,2372,2389,2390],[95,96,97,2324,2372,2389,2390,2448,2481,2482],[94,2324,2372,2389,2390],[94,99,100,102,2324,2372,2389,2390],[99,100,101,102,2324,2372,2389,2390],[103,107,108,113,2315,2324,2372,2389,2390],[2019,2041,2043,2324,2372,2389,2390],[2019,2040,2042,2043,2055,2324,2372,2389,2390],[2040,2042,2043,2047,2324,2372,2389,2390],[2056,2057,2324,2372,2389,2390],[2019,2040,2043,2047,2059,2060,2061,2324,2372,2389,2390],[2019,2038,2040,2041,2042,2324,2372,2389,2390],[2068,2324,2372,2389,2390],[92,2042,2043,2044,2045,2046,2051,2058,2062,2067,2069,2324,2372,2389,2390],[2041,2324,2372,2389,2390],[2040,2041,2042,2324,2372,2389,2390],[2041,2047,2048,2050,2324,2372,2389,2390],[2019,2040,2043,2324,2372,2389,2390],[2040,2043,2324,2372,2389,2390],[2040,2041,2043,2049,2324,2372,2389,2390],[2019,2037,2043,2324,2372,2389,2390],[2040,2324,2372,2389,2390],[2019,2043,2324,2372,2389,2390],[2064,2065,2324,2372,2389,2390],[2065,2066,2324,2372,2389,2390],[2064,2324,2372,2389,2390],[2039,2324,2372,2389,2390],[2070,2324,2372,2389,2390],[2019,2070,2072,2324,2372,2389,2390],[92,1997,1998,1999,2019,2070,2071,2073,2324,2372,2389,2390],[833,2324,2372,2389,2390],[686,2324,2372,2389,2390],[685,2324,2372,2389,2390],[687,2324,2372,2389,2390],[2121,2324,2372,2389,2390],[2123,2324,2372,2389,2390],[2125,2324,2372,2389,2390],[2127,2324,2372,2389,2390],[1434,2324,2372,2389,2390],[2129,2324,2372,2389,2390],[2120,2324,2372,2389,2390],[500,501,502,2324,2372,2389,2390],[101,103,107,113,500,502,2315,2324,2372,2389,2390],[101,103,107,113,501,2315,2324,2372,2389,2390],[500,504,505,506,2324,2372,2389,2390],[103,107,113,500,2315,2324,2372,2389,2390],[103,107,113,500,504,2315,2324,2372,2389,2390],[505,2324,2372,2389,2390],[500,1058,1059,1061,2324,2372,2389,2390],[103,107,113,1060,2315,2324,2372,2389,2390],[103,107,113,500,1059,2315,2324,2372,2389,2390],[103,107,113,1058,2315,2324,2372,2389,2390],[500,652,653,2324,2372,2389,2390],[103,107,113,500,535,539,651,653,2315,2324,2372,2389,2390],[103,107,113,500,539,651,652,2315,2324,2372,2389,2390],[500,655,656,657,658,659,660,2324,2372,2389,2390],[103,107,113,500,535,2315,2324,2372,2389,2390],[103,104,107,113,500,1104,2315,2324,2372,2389,2390],[101,103,107,113,174,500,2315,2324,2372,2389,2390],[101,103,107,113,655,2315,2324,2372,2389,2390],[103,107,113,655,2315,2324,2372,2389,2390],[656,657,2324,2372,2389,2390],[500,662,663,664,2324,2372,2389,2390],[103,107,113,662,2315,2324,2372,2389,2390],[663,2324,2372,2389,2390],[500,666,667,668,2324,2372,2389,2390],[103,107,113,666,2315,2324,2372,2389,2390],[667,2324,2372,2389,2390],[500,670,671,672,673,674,675,2324,2372,2389,2390],[103,107,113,500,2315,2318,2324,2372,2389,2390],[103,107,113,672,2315,2318,2324,2372,2389,2390],[103,107,113,670,2315,2324,2372,2389,2390],[671,673,2324,2372,2389,2390],[500,677,678,680,681,682,2324,2372,2389,2390],[103,107,113,500,677,2315,2324,2372,2389,2390],[103,107,113,679,2315,2324,2372,2389,2390],[103,107,113,174,500,2315,2324,2372,2389,2390],[103,107,113,677,2315,2324,2372,2389,2390],[678,680,2324,2372,2389,2390],[500,684,688,691,2324,2372,2389,2390],[103,107,113,684,687,2315,2324,2372,2389,2390],[103,107,113,500,687,2315,2324,2372,2389,2390],[103,107,113,687,689,2315,2324,2372,2389,2390],[688,690,2324,2372,2389,2390],[500,693,694,695,2324,2372,2389,2390],[103,107,113,693,2315,2324,2372,2389,2390],[694,2324,2372,2389,2390],[500,697,698,699,700,701,702,2324,2372,2389,2390],[103,107,113,699,2315,2324,2372,2389,2390],[103,107,113,697,2315,2324,2372,2389,2390],[698,700,2324,2372,2389,2390],[500,704,707,708,709,2324,2372,2389,2390],[103,107,113,500,704,2315,2324,2372,2389,2390],[103,107,113,704,705,707,708,2315,2324,2372,2389,2390],[706,709,2324,2372,2389,2390],[103,107,113,704,2315,2324,2372,2389,2390],[704,2324,2372,2389,2390],[103,107,113,500,705,2315,2324,2372,2389,2390],[500,714,715,716,2324,2372,2389,2390],[103,107,113,174,500,535,644,710,713,2315,2324,2372,2389,2390],[103,107,113,500,535,710,714,2315,2324,2372,2389,2390],[715,2324,2372,2389,2390],[500,718,719,2324,2372,2389,2390],[103,107,113,500,719,2315,2324,2372,2389,2390],[103,107,113,718,2315,2324,2372,2389,2390],[500,721,722,723,724,725,726,2324,2372,2389,2390],[103,107,113,721,2315,2324,2372,2389,2390],[103,107,113,174,500,644,721,725,2315,2324,2372,2389,2390],[103,107,113,724,1104,2315,2324,2372,2389,2390],[103,107,113,174,500,644,722,2315,2324,2372,2389,2390],[103,107,113,724,2315,2324,2372,2389,2390],[500,728,729,2324,2372,2389,2390],[103,107,113,500,729,2315,2324,2372,2389,2390],[103,107,113,728,2315,2324,2372,2389,2390],[500,738,2324,2372,2389,2390],[500,731,732,733,734,735,736,2324,2372,2389,2390],[103,107,113,500,731,2315,2324,2372,2389,2390],[103,107,113,500,733,2315,2324,2372,2389,2390],[103,107,113,731,2315,2324,2372,2389,2390],[732,734,2324,2372,2389,2390],[500,751,752,2324,2372,2389,2390],[103,107,113,500,749,750,752,2315,2324,2372,2389,2390],[103,107,113,539,750,751,2315,2324,2372,2389,2390],[749,2324,2372,2389,2390],[500,754,755,2324,2372,2389,2390],[103,107,113,174,500,644,651,749,755,2315,2324,2372,2389,2390],[103,107,113,750,754,2315,2324,2372,2389,2390],[500,780,781,782,783,2324,2372,2389,2390],[103,107,113,500,611,683,696,759,765,768,779,2315,2324,2372,2389,2390],[103,107,113,500,611,759,780,1104,2315,2324,2372,2389,2390],[103,107,113,780,2315,2324,2372,2389,2390],[103,107,113,487,644,782,1104,2315,2324,2372,2389,2390],[500,785,786,787,788,789,2324,2372,2389,2390],[500,791,792,2324,2372,2389,2390],[103,107,113,500,687,792,2315,2324,2372,2389,2390],[103,107,113,687,791,2315,2324,2372,2389,2390],[500,802,803,804,805,806,2324,2372,2389,2390],[103,107,113,644,2315,2324,2372,2389,2390],[103,104,107,113,500,801,1104,2315,2324,2372,2389,2390],[802,2324,2372,2389,2390],[103,107,113,500,801,804,2315,2324,2372,2389,2390],[500,808,809,810,2324,2372,2389,2390],[103,104,107,113,500,801,807,1104,2315,2324,2372,2389,2390],[808,2324,2372,2389,2390],[103,107,113,500,801,804,1104,2315,2324,2372,2389,2390],[500,812,813,814,2324,2372,2389,2390],[103,107,113,174,500,813,2315,2324,2372,2389,2390],[103,107,113,812,2315,2324,2372,2389,2390],[500,761,762,763,764,2324,2372,2389,2390],[103,107,113,500,760,762,2315,2324,2372,2389,2390],[103,107,113,761,2315,2324,2372,2389,2390],[92,2132,2133,2324,2372,2389,2390],[500,816,817,2324,2372,2389,2390],[103,107,113,500,817,2315,2324,2372,2389,2390],[103,107,113,816,2315,2324,2372,2389,2390],[500,819,820,2324,2372,2389,2390],[103,107,113,500,765,820,2315,2324,2372,2389,2390],[103,107,113,765,819,2315,2324,2372,2389,2390],[500,822,823,824,825,826,827,2324,2372,2389,2390],[103,107,113,500,525,535,683,2315,2324,2372,2389,2390],[103,107,113,500,644,651,683,1104,2315,2324,2372,2389,2390],[822,2324,2372,2389,2390],[103,107,113,535,2315,2324,2372,2389,2390],[500,829,830,831,2324,2372,2389,2390],[103,107,113,829,2315,2324,2372,2389,2390],[830,2324,2372,2389,2390],[500,836,837,838,839,840,841,844,2324,2372,2389,2390],[103,107,113,836,2315,2324,2372,2389,2390],[103,107,113,174,500,836,2315,2324,2372,2389,2390],[103,107,113,836,837,2315,2324,2372,2389,2390],[103,107,113,174,500,836,837,2315,2324,2372,2389,2390],[103,107,113,500,836,837,838,2315,2324,2372,2389,2390],[842,843,2324,2372,2389,2390],[103,107,113,174,487,2315,2324,2372,2389,2390],[103,107,113,174,487,500,834,835,837,838,2315,2324,2372,2389,2390],[103,107,113,500,836,837,2315,2324,2372,2389,2390],[500,846,847,2324,2372,2389,2390],[103,107,113,500,847,2315,2324,2372,2389,2390],[103,107,113,846,2315,2324,2372,2389,2390],[500,850,851,2324,2372,2389,2390],[103,107,113,500,851,2315,2324,2372,2389,2390],[103,107,113,850,2315,2324,2372,2389,2390],[500,849,853,2324,2372,2389,2390],[103,107,113,500,853,2315,2324,2372,2389,2390],[103,107,113,849,852,2315,2324,2372,2389,2390],[503,507,535,539,651,654,661,665,669,676,683,692,696,703,710,713,717,720,727,730,737,739,753,756,759,765,768,779,784,790,793,801,807,811,815,818,821,828,832,845,848,852,854,857,861,871,873,876,879,882,885,893,896,899,903,910,922,935,936,941,946,950,953,959,962,995,1003,1006,1009,1014,1019,1028,1031,1036,1047,1050,1057,1062,1066,1071,1077,1079,1084,1087,1090,1094,2324,2372,2389,2390],[103,107,113,500,1078,2315,2324,2372,2389,2390],[500,855,856,2324,2372,2389,2390],[103,107,113,174,500,856,2315,2324,2372,2389,2390],[103,107,113,855,2315,2324,2372,2389,2390],[500,858,859,860,2324,2372,2389,2390],[103,107,113,174,500,535,713,2315,2324,2372,2389,2390],[103,107,113,500,858,1104,2315,2324,2372,2389,2390],[859,2324,2372,2389,2390],[500,536,537,538,2324,2372,2389,2390],[103,107,113,500,536,2315,2324,2372,2389,2390],[537,2324,2372,2389,2390],[500,766,767,2324,2372,2389,2390],[103,107,113,500,767,2315,2324,2372,2389,2390],[103,107,113,766,2315,2324,2372,2389,2390],[103,107,113,1080,1081,1082,1083,2315,2324,2372,2389,2390],[103,107,113,1080,1081,2315,2324,2372,2389,2390],[103,107,113,1080,2315,2324,2372,2389,2390],[103,107,113,487,2315,2324,2372,2389,2390],[500,1069,1070,2324,2372,2389,2390],[1067,2324,2372,2389,2390],[103,107,113,500,535,539,651,1067,1068,1070,2315,2324,2372,2389,2390],[103,107,113,500,525,539,651,1067,1068,1069,2315,2324,2372,2389,2390],[500,862,863,864,865,866,867,868,869,870,2324,2372,2389,2390],[863,865,866,867,2324,2372,2389,2390],[103,107,113,500,862,2315,2318,2324,2372,2389,2390],[103,107,113,862,864,2315,2324,2372,2389,2390],[103,107,113,500,535,862,2315,2318,2324,2372,2389,2390],[103,107,113,863,2315,2318,2324,2372,2389,2390],[500,1085,1086,2324,2372,2389,2390],[103,107,113,174,536,683,2315,2324,2372,2389,2390],[1085,2324,2372,2389,2390],[500,758,2324,2372,2389,2390],[103,107,113,500,757,2315,2324,2372,2389,2390],[103,107,113,500,758,2315,2324,2372,2389,2390],[500,1089,2324,2372,2389,2390],[103,107,113,500,1088,2315,2324,2372,2389,2390],[103,107,113,500,1089,2315,2324,2372,2389,2390],[101,103,107,113,500,872,2315,2324,2372,2389,2390],[101,103,107,113,500,2315,2324,2372,2389,2390],[92,2132,2324,2372,2389,2390],[500,874,875,2324,2372,2389,2390],[103,107,113,500,875,2315,2324,2372,2389,2390],[103,107,113,500,874,2315,2324,2372,2389,2390],[500,877,878,2324,2372,2389,2390],[500,880,881,2324,2372,2389,2390],[103,107,113,500,651,683,881,1104,2315,2324,2372,2389,2390],[103,107,113,500,683,880,1104,2315,2324,2372,2389,2390],[500,1091,1092,1093,2324,2372,2389,2390],[103,107,113,500,525,535,651,1092,2315,2324,2372,2389,2390],[103,107,113,500,651,1091,1104,2315,2324,2372,2389,2390],[500,525,526,527,528,529,530,531,532,533,534,2324,2372,2389,2390],[103,107,113,500,529,2315,2324,2372,2389,2390],[103,107,113,525,2315,2324,2372,2389,2390],[103,107,113,500,525,526,527,532,534,2315,2324,2372,2389,2390],[103,107,113,525,533,1104,2315,2324,2372,2389,2390],[103,107,113,500,528,2315,2324,2372,2389,2390],[103,107,113,526,527,2315,2324,2372,2389,2390],[103,107,113,526,531,2315,2324,2372,2389,2390],[103,107,113,526,530,2315,2324,2372,2389,2390],[500,883,884,2324,2372,2389,2390],[103,107,113,500,884,2315,2324,2372,2389,2390],[103,107,113,883,2315,2324,2372,2389,2390],[500,886,887,888,889,890,891,892,2324,2372,2389,2390],[103,107,113,890,2315,2324,2372,2389,2390],[103,107,113,500,886,889,2315,2324,2372,2389,2390],[103,107,113,888,2315,2324,2372,2389,2390],[103,107,113,174,500,891,2315,2324,2372,2389,2390],[103,107,113,174,500,887,2315,2324,2372,2389,2390],[103,107,113,886,2315,2324,2372,2389,2390],[500,894,895,2324,2372,2389,2390],[103,107,113,174,500,895,2315,2324,2372,2389,2390],[103,107,113,500,894,2315,2324,2372,2389,2390],[500,897,898,2324,2372,2389,2390],[103,107,113,500,898,2315,2324,2372,2389,2390],[103,107,113,897,2315,2324,2372,2389,2390],[500,900,901,902,2324,2372,2389,2390],[103,107,113,500,901,2315,2324,2372,2389,2390],[103,107,113,900,2315,2324,2372,2389,2390],[500,904,905,907,908,909,2324,2372,2389,2390],[103,107,113,500,905,2315,2324,2372,2389,2390],[103,107,113,904,2315,2324,2372,2389,2390],[103,107,113,906,2315,2324,2372,2389,2390],[103,107,113,907,2315,2324,2372,2389,2390],[103,107,113,1063,1065,1104,2315,2324,2372,2389,2390],[103,107,113,174,500,1063,1064,2315,2324,2372,2389,2390],[103,107,113,1063,1065,2315,2324,2372,2389,2390],[500,924,926,2324,2372,2389,2390],[103,107,113,160,500,535,911,924,927,2315,2324,2372,2389,2390],[103,104,107,113,911,922,2315,2324,2372,2389,2390],[103,107,113,486,500,651,911,923,925,927,1104,2315,2324,2372,2389,2390],[103,107,113,651,911,925,2315,2324,2372,2389,2390],[103,107,113,911,926,2315,2324,2372,2389,2390],[500,928,930,931,932,933,934,2324,2372,2389,2390],[103,107,113,500,930,2315,2324,2372,2389,2390],[103,107,113,500,535,927,931,2315,2324,2372,2389,2390],[103,107,113,486,500,651,910,911,927,928,930,1104,2315,2324,2372,2389,2390],[103,107,113,930,2315,2324,2372,2389,2390],[103,107,113,928,929,2315,2324,2372,2389,2390],[500,937,938,939,940,2324,2372,2389,2390],[103,107,113,500,940,2315,2324,2372,2389,2390],[103,107,113,939,2315,2324,2372,2389,2390],[103,107,113,500,644,938,2315,2324,2372,2389,2390],[103,107,113,937,2315,2324,2372,2389,2390],[500,942,944,945,2324,2372,2389,2390],[103,107,113,944,2315,2324,2372,2389,2390],[103,107,113,500,525,942,943,2315,2324,2372,2389,2390],[103,107,113,500,1104,2315,2324,2372,2389,2390],[500,947,948,949,2324,2372,2389,2390],[103,107,113,500,947,2315,2324,2372,2389,2390],[500,1073,1074,1075,1076,2324,2372,2389,2390],[103,107,113,500,1076,2315,2324,2372,2389,2390],[103,107,113,1075,2315,2324,2372,2389,2390],[103,107,113,500,1072,1074,2315,2324,2372,2389,2390],[103,107,113,1072,1073,2315,2324,2372,2389,2390],[500,951,952,2324,2372,2389,2390],[103,107,113,500,687,952,2315,2324,2372,2389,2390],[103,107,113,687,951,2315,2324,2372,2389,2390],[500,954,955,956,957,958,2324,2372,2389,2390],[103,107,113,500,957,2315,2324,2372,2389,2390],[103,107,113,500,954,956,2315,2324,2372,2389,2390],[103,107,113,500,955,2315,2324,2372,2389,2390],[103,107,113,954,2315,2324,2372,2389,2390],[500,960,961,2324,2372,2389,2390],[103,107,113,174,500,961,2315,2324,2372,2389,2390],[103,107,113,960,2315,2324,2372,2389,2390],[500,963,964,966,968,971,972,973,974,994,2324,2372,2389,2390],[103,107,113,500,965,2315,2324,2372,2389,2390],[103,107,113,964,2315,2324,2372,2389,2390],[103,107,113,975,2315,2324,2372,2389,2390],[103,104,107,113,984,2315,2324,2372,2389,2390],[103,107,113,977,2315,2324,2372,2389,2390],[103,104,107,113,964,965,979,2315,2324,2372,2389,2390],[103,104,107,113,500,965,981,982,2315,2324,2372,2389,2390],[976,978,980,983,984,985,986,2324,2372,2389,2390],[103,104,107,113,500,964,965,966,2315,2324,2372,2389,2390],[103,107,113,963,2315,2324,2372,2389,2390],[970,982,988,989,990,991,2324,2372,2389,2390],[103,107,113,973,2315,2324,2372,2389,2390],[103,107,113,964,968,2315,2324,2372,2389,2390],[103,107,113,964,968,988,2315,2324,2372,2389,2390],[103,107,113,644,964,966,967,968,969,2315,2324,2372,2389,2390],[103,107,113,922,968,969,2315,2324,2372,2389,2390],[103,107,113,968,982,2315,2324,2372,2389,2390],[103,107,113,500,922,964,965,2315,2324,2372,2389,2390],[103,107,113,965,2315,2324,2372,2389,2390],[103,107,113,964,965,2315,2324,2372,2389,2390],[103,107,113,644,968,987,993,2315,2324,2372,2389,2390],[103,107,113,500,964,965,2315,2324,2372,2389,2390],[103,104,107,113,500,922,964,965,967,2315,2324,2372,2389,2390],[103,104,107,113,500,964,965,967,968,970,1104,2315,2324,2372,2389,2390],[103,107,113,500,963,964,965,966,967,2315,2324,2372,2389,2390],[103,107,113,174,963,2315,2324,2372,2389,2390],[103,107,113,964,967,968,969,992,1104,2315,2324,2372,2389,2390],[500,772,776,778,2324,2372,2389,2390],[103,107,113,644,769,772,773,2315,2324,2372,2389,2390],[103,107,113,770,772,2315,2324,2372,2389,2390],[103,107,113,770,771,772,2315,2324,2372,2389,2390],[103,107,113,772,773,1104,2315,2324,2372,2389,2390],[103,107,113,612,770,772,773,775,2315,2324,2372,2389,2390],[103,107,113,770,772,773,774,2315,2324,2372,2389,2390],[103,107,113,127,500,644,769,770,772,773,775,1104,2315,2324,2372,2389,2390],[103,107,113,174,500,770,771,773,775,2315,2324,2372,2389,2390],[777,2324,2372,2389,2390],[103,107,113,651,772,773,2315,2324,2372,2389,2390],[500,996,997,998,1000,1001,1002,2324,2372,2389,2390],[103,107,113,997,1001,1002,2315,2324,2372,2389,2390],[103,107,113,500,998,999,2315,2324,2372,2389,2390],[103,107,113,998,1000,2315,2324,2372,2389,2390],[103,104,107,113,500,998,1000,2315,2324,2372,2389,2390],[103,107,113,500,996,2315,2324,2372,2389,2390],[103,107,113,997,2315,2324,2372,2389,2390],[103,104,107,113,500,998,1001,2315,2324,2372,2389,2390],[500,711,712,2324,2372,2389,2390],[103,107,113,174,500,712,2315,2324,2372,2389,2390],[103,107,113,711,2315,2324,2372,2389,2390],[500,1004,1005,2324,2372,2389,2390],[103,107,113,1004,1104,2315,2324,2372,2389,2390],[500,794,795,796,797,798,800,2324,2372,2389,2390],[103,107,113,500,525,687,794,2315,2324,2372,2389,2390],[103,107,113,500,525,535,687,2315,2324,2372,2389,2390],[103,107,113,687,794,2315,2324,2372,2389,2390],[103,107,113,799,2315,2324,2372,2389,2390],[103,104,107,113,500,794,1104,2315,2324,2372,2389,2390],[687,794,2324,2372,2389,2390],[500,1007,1008,2324,2372,2389,2390],[103,107,113,174,500,535,644,1008,2315,2324,2372,2389,2390],[103,107,113,500,1007,1104,2315,2324,2372,2389,2390],[500,1010,1011,1012,1013,2324,2372,2389,2390],[103,107,113,500,1012,2315,2324,2372,2389,2390],[103,107,113,1011,2315,2324,2372,2389,2390],[103,107,113,1010,2315,2324,2372,2389,2390],[500,646,647,648,649,650,2324,2372,2389,2390],[103,107,113,500,647,2315,2324,2372,2389,2390],[103,107,113,500,535,644,645,2315,2324,2372,2389,2390],[103,107,113,535,646,2315,2324,2372,2389,2390],[103,107,113,500,535,644,646,647,649,2315,2324,2372,2389,2390],[103,107,113,500,535,646,647,648,2315,2324,2372,2389,2390],[500,1051,1052,1053,1054,1055,1056,2324,2372,2389,2390],[103,107,113,500,635,2315,2324,2372,2389,2390],[103,107,113,500,632,1051,1052,2315,2324,2372,2389,2390],[103,107,113,632,1052,1055,2315,2324,2372,2389,2390],[103,107,113,500,632,1051,1052,1054,2315,2324,2372,2389,2390],[103,107,113,632,1053,1104,2315,2324,2372,2389,2390],[103,107,113,683,2315,2324,2372,2389,2390],[500,1015,1018,2324,2372,2389,2390],[103,107,113,500,1015,1016,2315,2324,2372,2389,2390],[103,107,113,500,1017,1104,2315,2324,2372,2389,2390],[103,107,113,500,1018,2315,2324,2372,2389,2390],[103,107,113,1015,1017,2315,2324,2372,2389,2390],[500,1029,1030,2324,2372,2389,2390],[935,1028,2324,2372,2389,2390],[103,107,113,500,935,1028,1104,2315,2324,2372,2389,2390],[500,1034,1035,2324,2372,2389,2390],[1034,2324,2372,2389,2390],[103,107,113,500,922,1032,1033,1104,2315,2324,2372,2389,2390],[103,107,113,500,1033,2315,2324,2372,2389,2390],[103,107,113,500,727,1022,1032,2315,2324,2372,2389,2390],[500,1020,1022,1025,1026,1027,2324,2372,2389,2390],[1025,2324,2372,2389,2390],[500,1022,1023,2324,2372,2389,2390],[1022,1024,2324,2372,2389,2390],[103,107,113,1020,1022,1023,1024,2315,2324,2372,2389,2390],[103,107,113,500,1022,1024,2315,2324,2372,2389,2390],[103,107,113,1020,1021,1023,1024,2315,2324,2372,2389,2390],[103,107,113,500,644,1022,1024,2315,2324,2372,2389,2390],[500,1038,1039,1041,1043,1045,1046,2324,2372,2389,2390],[1038,2324,2372,2389,2390],[103,107,113,500,1037,1038,1040,2315,2324,2372,2389,2390],[103,107,113,500,1037,1038,1041,2315,2324,2372,2389,2390],[103,107,113,500,1044,2315,2324,2372,2389,2390],[103,107,113,1045,2315,2324,2372,2389,2390],[103,107,113,500,1038,1042,2315,2324,2372,2389,2390],[103,107,113,1038,1043,2315,2324,2372,2389,2390],[103,107,113,500,1037,1039,2315,2324,2372,2389,2390],[103,107,113,500,1038,2315,2324,2372,2389,2390],[912,914,915,916,919,920,921,2324,2372,2389,2390],[103,107,113,500,914,918,919,2315,2324,2372,2389,2390],[103,107,113,500,914,920,2315,2324,2372,2389,2390],[103,107,113,500,914,2315,2324,2372,2389,2390],[103,107,113,127,917,2315,2324,2372,2389,2390],[103,107,113,913,2315,2324,2372,2389,2390],[500,1048,1049,2324,2372,2389,2390],[103,107,113,500,1049,2315,2324,2372,2389,2390],[103,107,113,1048,2315,2324,2372,2389,2390],[167,168,169,170,171,172,173,2324,2372,2389,2390],[103,107,113,1095,2315,2324,2372,2389,2390],[1097,1098,1099,1101,2324,2372,2389,2390],[103,107,113,1100,2315,2324,2372,2389,2390],[540,541,542,543,544,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,636,637,638,639,640,641,642,643,2324,2372,2389,2390],[487,2324,2372,2389,2390],[103,107,113,635,2315,2324,2372,2389,2390],[103,107,113,487,500,545,611,2315,2324,2372,2389,2390],[103,107,113,613,2315,2324,2372,2389,2390],[103,107,113,174,644,687,1095,1096,1102,1103,2315,2324,2372,2389,2390],[110,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,2324,2372,2389,2390],[103,107,113,784,2315,2324,2372,2389,2390],[484,2324,2372,2389,2390],[151,152,153,154,155,156,2324,2372,2389,2390],[157,178,485,488,489,490,491,492,493,494,495,496,497,498,499,2324,2372,2389,2390],[94,500,2324,2372,2389,2390],[158,159,160,161,165,166,175,176,177,2324,2372,2389,2390],[103,107,113,160,2315,2324,2372,2389,2390],[162,163,164,2324,2372,2389,2390],[103,107,113,164,2315,2324,2372,2389,2390],[103,107,113,162,163,2315,2324,2372,2389,2390],[174,2324,2372,2389,2390],[112,486,2324,2372,2389,2390],[112,2324,2372,2389,2390],[2137,2324,2372,2389,2390],[1451,2324,2372,2389,2390],[1449,1450,1452,2324,2372,2389,2390],[1451,1455,1458,1460,1461,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,2324,2372,2389,2390],[1451,1455,1456,2324,2372,2389,2390],[1451,1455,2324,2372,2389,2390],[1451,1452,1505,2324,2372,2389,2390],[1457,2324,2372,2389,2390],[1457,1462,2324,2372,2389,2390],[1457,1461,2324,2372,2389,2390],[1454,1457,1461,2324,2372,2389,2390],[1457,1460,1483,2324,2372,2389,2390],[1455,1457,2324,2372,2389,2390],[1454,2324,2372,2389,2390],[1451,1459,2324,2372,2389,2390],[1455,1459,1460,1461,2324,2372,2389,2390],[1454,1455,2324,2372,2389,2390],[1451,1452,2324,2372,2389,2390],[1451,1452,1505,1507,2324,2372,2389,2390],[1451,1508,2324,2372,2389,2390],[1515,1516,1517,2324,2372,2389,2390],[1451,1505,1506,2324,2372,2389,2390],[1451,1453,1520,2324,2372,2389,2390],[1509,1511,2324,2372,2389,2390],[1508,1511,2324,2372,2389,2390],[1451,1460,1469,1505,1506,1507,1508,1511,1512,1513,1514,1518,1519,2324,2372,2389,2390],[1486,1511,2324,2372,2389,2390],[1509,1510,2324,2372,2389,2390],[1451,1520,2324,2372,2389,2390],[1508,1512,1513,2324,2372,2389,2390],[1511,2324,2372,2389,2390],[483,2324,2372,2389,2390],[103,107,112,2315,2324,2372,2389,2390],[2324,2372,2389,2390,2444],[2324,2372,2389,2390,2442,2444],[2324,2372,2389,2390,2433,2441,2442,2443,2445,2447],[2324,2372,2389,2390,2431],[2324,2372,2389,2390,2434,2439,2444,2447],[2324,2372,2389,2390,2430,2447],[2324,2372,2389,2390,2434,2435,2438,2439,2440,2447],[2324,2372,2389,2390,2434,2435,2436,2438,2439,2447],[2324,2372,2389,2390,2431,2432,2433,2434,2435,2439,2440,2441,2443,2444,2445,2447],[2324,2372,2389,2390,2447],[2324,2372,2389,2390,2429,2431,2432,2433,2434,2435,2436,2438,2439,2440,2441,2442,2443,2444,2445,2446],[2324,2372,2389,2390,2429,2447],[2324,2372,2389,2390,2434,2436,2437,2439,2440,2447],[2324,2372,2389,2390,2438,2447],[2324,2372,2389,2390,2439,2440,2444,2447],[2324,2372,2389,2390,2432,2442],[1713,2324,2372,2389,2390],[1714,1715,1716,2324,2372,2389,2390],[1714,1715,1717,2324,2372,2389,2390],[2324,2372,2389,2390,2424,2479,2480],[2324,2372,2389,2390,2423,2424],[2324,2372,2389,2390,2429,2468],[2324,2372,2389,2390,2455],[2324,2372,2389,2390,2451,2468],[2324,2372,2389,2390,2450,2451,2452,2455,2467,2468,2469,2470,2471,2472,2473,2474,2475,2476],[2324,2372,2389,2390,2472],[2324,2372,2389,2390,2450,2452,2455,2473,2474],[2324,2372,2389,2390,2471,2475],[2324,2372,2389,2390,2450,2453,2454],[2324,2372,2389,2390,2453],[2324,2372,2389,2390,2450,2451,2452,2455,2467],[2324,2372,2389,2390,2456,2461,2467],[2324,2372,2389,2390,2467],[2324,2372,2389,2390,2456,2467],[2324,2372,2389,2390,2456,2457,2458,2459,2460,2461,2462,2463,2464,2465,2466],[2019,2052,2324,2372,2389,2390],[2019,2324,2372,2389,2390],[2052,2053,2054,2324,2372,2389,2390],[2019,2053,2324,2372,2389,2390],[2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2018,2324,2372,2389,2390],[2001,2002,2019,2324,2372,2389,2390],[2001,2019,2324,2372,2389,2390],[2012,2019,2324,2372,2389,2390],[2014,2015,2016,2017,2324,2372,2389,2390],[2003,2019,2324,2372,2389,2390],[2028,2324,2372,2389,2390],[2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,2035,2036,2324,2372,2389,2390],[2020,2028,2030,2324,2372,2389,2390],[2026,2028,2035,2324,2372,2389,2390],[2030,2324,2372,2389,2390],[2028,2030,2324,2372,2389,2390],[2029,2324,2372,2389,2390],[2020,2028,2324,2372,2389,2390],[2021,2022,2023,2024,2025,2026,2027,2029,2324,2372,2389,2390],[2324,2372,2389,2390,2492],[525,2324,2372,2389,2390],[1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,2324,2372,2389,2390],[1543,2324,2372,2389,2390],[1597,2324,2372,2389,2390],[1592,1593,2324,2372,2389,2390],[103,107,113,1662,2315,2324,2372,2389,2390],[1665,2324,2372,2389,2390],[103,107,113,1611,1695,2315,2324,2372,2389,2390],[103,107,113,1594,1611,1695,2315,2324,2372,2389,2390],[103,107,113,1695,2315,2324,2372,2389,2390],[1671,2324,2372,2389,2390],[103,107,113,1639,2315,2324,2372,2389,2390],[103,107,113,1695,1699,2315,2324,2372,2389,2390],[1675,2324,2372,2389,2390],[1603,1604,2324,2372,2389,2390],[1602,2324,2372,2389,2390],[103,107,113,1595,2315,2324,2372,2389,2390],[103,107,113,1616,2315,2324,2372,2389,2390],[1613,1614,2324,2372,2389,2390],[1616,2324,2372,2389,2390],[1613,2324,2372,2389,2390],[1608,2324,2372,2389,2390],[1639,1646,1678,1693,1694,1907,2324,2372,2389,2390],[103,107,113,1679,2315,2324,2372,2389,2390],[103,107,113,1608,1633,2315,2324,2372,2389,2390],[1647,2324,2372,2389,2390],[1649,2324,2372,2389,2390],[1702,2324,2372,2389,2390],[103,107,113,1608,1639,2315,2324,2372,2389,2390],[1652,2324,2372,2389,2390],[1704,2324,2372,2389,2390],[103,107,113,1611,1639,2315,2324,2372,2389,2390],[1706,2324,2372,2389,2390],[103,107,113,1608,1609,1639,2315,2324,2372,2389,2390],[1640,2324,2372,2389,2390],[1681,2324,2372,2389,2390],[1621,2324,2372,2389,2390],[1708,2324,2372,2389,2390],[1655,2324,2372,2389,2390],[103,107,113,1639,1695,2315,2324,2372,2389,2390],[103,107,113,1608,1628,1658,1695,2315,2324,2372,2389,2390],[103,107,113,1590,2315,2324,2372,2389,2390],[1710,2324,2372,2389,2390],[103,107,113,1613,1616,2315,2324,2372,2389,2390],[1903,2324,2372,2389,2390],[103,107,113,1615,1616,1712,1902,2315,2324,2372,2389,2390],[1905,2324,2372,2389,2390],[1635,2324,2372,2389,2390],[1634,2324,2372,2389,2390],[1600,2324,2372,2389,2390],[1660,2324,2372,2389,2390],[1685,2324,2372,2389,2390],[103,107,113,1637,2315,2324,2372,2389,2390],[1598,1599,1612,1616,1617,1618,1619,1620,1622,1696,1697,1698,1699,1700,1701,1703,1705,1707,1709,1711,1904,1906,2324,2372,2389,2390],[1591,1594,1596,1612,1616,1617,1618,1619,1620,1622,1907,2324,2372,2389,2390],[1591,1594,1596,1601,1605,2324,2372,2389,2390],[1606,1645,2324,2372,2389,2390],[1641,1642,1643,1644,2324,2372,2389,2390],[1648,1650,1651,1653,1654,1656,1657,1659,1661,1663,1664,1666,1667,1668,1669,1670,1672,1673,1674,1676,1677,2324,2372,2389,2390],[1680,1682,1683,1684,1686,1687,1688,1689,1690,1691,1692,2324,2372,2389,2390],[1628,2324,2372,2389,2390],[1627,2324,2372,2389,2390],[103,107,113,1611,1616,2315,2324,2372,2389,2390],[103,107,113,1594,1611,1616,1618,2315,2324,2372,2389,2390],[1611,1615,2324,2372,2389,2390],[1590,1609,1612,1616,1617,1618,1619,1620,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,2324,2372,2389,2390],[1623,2324,2372,2389,2390],[1611,2324,2372,2389,2390],[103,107,113,1609,1634,2315,2324,2372,2389,2390],[1609,2324,2372,2389,2390],[103,107,113,1609,1623,2315,2324,2372,2389,2390],[2324,2337,2341,2372,2389,2390,2415],[2324,2337,2372,2389,2390,2404,2415],[2324,2332,2372,2389,2390],[2324,2334,2337,2372,2389,2390,2412,2415],[2324,2372,2389,2390,2392,2412],[2324,2332,2372,2389,2390,2422],[2324,2334,2337,2372,2389,2390,2392,2415],[2324,2329,2330,2333,2336,2372,2383,2389,2390,2404,2415],[2324,2337,2344,2372,2389,2390],[2324,2329,2335,2372,2389,2390],[2324,2337,2358,2359,2372,2389,2390],[2324,2333,2337,2372,2389,2390,2407,2415,2422],[2324,2358,2372,2389,2390,2422],[2324,2331,2332,2372,2389,2390,2422],[2324,2337,2372,2389,2390],[2324,2331,2332,2333,2334,2335,2336,2337,2338,2339,2341,2342,2343,2344,2345,2346,2347,2348,2349,2350,2351,2352,2353,2354,2355,2356,2357,2359,2360,2361,2362,2363,2364,2372,2389,2390],[2324,2337,2352,2372,2389,2390],[2324,2337,2344,2345,2372,2389,2390],[2324,2335,2337,2345,2346,2372,2389,2390],[2324,2336,2372,2389,2390],[2324,2329,2332,2337,2372,2389,2390],[2324,2337,2341,2345,2346,2372,2389,2390],[2324,2341,2372,2389,2390],[2324,2335,2337,2340,2372,2389,2390,2415],[2324,2329,2334,2337,2344,2372,2389,2390],[2324,2372,2389,2390,2404],[2324,2332,2337,2358,2372,2389,2390,2420,2422],[2324,2372,2389,2390,2481,2489,2490,2491,2493],[2324,2372,2389,2390,2481,2489],[2324,2372,2389,2390,2490],[2324,2372,2389,2390,2494,2495],[2324,2372,2389,2390,2480,2496],[2324,2372,2389,2390,2495,2500],[2324,2372,2389,2390,2495,2499],[2324,2372,2389,2390,2480,2500],[2324,2372,2389,2390,2424,2428,2479,2480,2498],[2324,2372,2389,2390,2480],[2324,2372,2389,2390,2480,2504],[91,2324,2372,2389,2390],[87,88,90,2324,2372,2383,2384,2386,2387,2388,2389,2390,2392,2404,2412,2415,2421,2422,2424,2425,2426,2427,2428,2448,2449,2478,2479,2480],[87,88,89,2324,2372,2389,2390,2426],[87,2324,2372,2389,2390],[88,2324,2372,2389,2390],[89,90,2324,2372,2389,2390],[2324,2372,2389,2390,2477],[2324,2372,2389,2390,2424,2480],[103,107,113,1434,1435,2120,2126,2298,2315,2324,2372,2389,2390],[103,106,107,113,2315,2324,2372,2389,2390],[98,102,2324,2372,2389,2390],[102,2324,2372,2389,2390],[104,1552,2324,2372,2389,2390],[104,128,130,136,1552,1554,2324,2372,2389,2390],[104,128,1552,2324,2372,2389,2390],[103,104,105,107,109,110,111,113,137,140,1554,1556,2315,2318,2324,2372,2389,2390],[103,104,105,107,113,133,2315,2324,2372,2389,2390],[103,104,105,107,113,1441,1967,2315,2324,2372,2389,2390],[92,103,104,105,107,113,137,1105,1413,1429,1524,1525,1563,1610,1611,1967,1970,1971,1972,1973,1974,1988,1989,2315,2324,2372,2389,2390],[103,104,105,107,113,1413,1555,2315,2318,2324,2372,2389,2390],[103,104,105,107,109,113,2315,2324,2372,2389,2390],[103,104,105,107,113,2315,2324,2372,2389,2390],[103,104,105,107,113,1993,2315,2324,2372,2389,2390],[92,103,104,105,107,113,1110,2074,2081,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1105,2076,2315,2324,2372,2389,2390],[104,1413,2324,2372,2389,2390],[103,104,105,107,113,1104,2085,2086,2087,2315,2324,2372,2389,2390],[103,104,105,107,109,113,1104,2085,2315,2324,2372,2389,2390],[103,104,105,107,113,1110,2086,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1110,2315,2324,2372,2389,2390],[103,104,105,107,113,1413,1432,1561,2090,2315,2324,2372,2389,2390],[103,104,105,107,113,2090,2315,2324,2372,2389,2390],[104,2324,2372,2389,2390],[103,104,105,107,113,2090,2091,2092,2093,2094,2315,2324,2372,2389,2390],[103,104,105,107,113,2076,2090,2095,2315,2324,2372,2389,2390],[103,104,105,107,113,2077,2315,2324,2372,2389,2390],[103,104,107,113,1104,1105,1432,1563,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,2077,2078,2079,2315,2324,2372,2389,2390],[103,104,105,107,109,113,1554,2075,2076,2077,2079,2080,2081,2315,2324,2372,2389,2390],[103,104,105,107,113,1446,2315,2324,2372,2389,2390],[103,104,105,107,109,113,1104,2315,2324,2372,2389,2390],[103,104,105,107,113,2076,2315,2324,2372,2389,2390],[103,104,105,107,113,1966,1967,2315,2324,2372,2389,2390],[103,104,105,107,113,137,1105,1413,1429,1447,1448,1521,1522,1553,1554,2315,2324,2372,2389,2390],[103,104,105,107,113,128,130,137,1104,1105,1554,2100,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,1413,1429,1973,2114,2315,2324,2372,2389,2390],[103,104,107,113,1553,2315,2324,2372,2389,2390],[104,134,140,2324,2372,2389,2390],[104,107,2318,2324,2372,2389,2390],[104,1105,2117,2324,2372,2389,2390],[103,104,107,113,137,2315,2324,2372,2389,2390],[104,2122,2124,2126,2128,2130,2324,2372,2389,2390],[103,104,107,113,1413,2134,2315,2324,2372,2389,2390],[92,103,104,107,113,2136,2137,2315,2324,2372,2389,2390],[103,104,107,113,2139,2315,2324,2372,2389,2390],[103,104,107,113,1547,2141,2315,2324,2372,2389,2390],[103,104,105,107,113,1554,2315,2324,2372,2389,2390],[103,104,105,107,113,143,2315,2318,2324,2372,2389,2390],[103,104,105,107,109,113,140,142,144,145,146,148,149,1106,1554,2315,2324,2372,2389,2390],[103,104,105,107,113,134,143,147,2315,2324,2372,2389,2390],[103,104,105,107,113,137,150,1105,2315,2324,2372,2389,2390],[103,104,105,107,113,134,140,1554,2315,2324,2372,2389,2390],[92,103,104,105,107,109,113,140,2315,2324,2372,2389,2390],[103,104,105,107,113,140,141,2315,2324,2372,2389,2390],[103,104,105,107,113,140,1113,1554,2315,2324,2372,2389,2390],[103,104,105,107,111,113,1554,2315,2324,2372,2389,2390],[103,104,105,107,113,133,1110,2315,2318,2324,2372,2389,2390],[103,104,105,107,113,1111,2315,2318,2324,2372,2389,2390],[103,104,105,107,113,137,140,1109,1112,1554,2315,2324,2372,2389,2390],[103,104,105,107,113,1107,1108,1114,2315,2324,2372,2389,2390],[92,103,104,107,113,1553,1557,1558,1559,2315,2324,2372,2389,2390],[104,107,128,129,133,134,136,137,1546,1547,2318,2324,2372,2389,2390],[104,107,1554,2318,2324,2372,2389,2390],[104,107,111,133,137,1546,2318,2324,2372,2389,2390],[104,107,129,1115,1117,1118,1416,1417,1419,1420,1422,1426,1428,1545,2318,2324,2372,2389,2390],[104,113,2324,2372,2389,2390],[104,113,1553,2324,2372,2389,2390],[104,107,113,129,133,2318,2324,2372,2389,2390],[94,104,113,132,135,138,139,2324,2372,2389,2390],[104,107,113,129,131,132,135,136,1547,2318,2324,2372,2389,2390],[104,132,134,135,137,1547,2324,2372,2389,2390],[104,1081,1104,2324,2372,2389,2390],[104,687,2324,2372,2389,2390],[104,137,2324,2372,2389,2390],[104,114,127,130,1548,1549,2324,2372,2389,2390],[104,114,1549,2324,2372,2389,2390],[104,114,127,128,129,130,136,1105,1547,1549,1550,1551,2324,2372,2389,2390],[114,1549,2324,2372,2389,2390],[104,2317,2324,2372,2389,2390],[94,104,127,2324,2372,2389,2390],[103,104,105,107,113,129,131,136,137,1104,1413,1415,1418,2315,2324,2372,2389,2390],[103,104,105,107,113,129,131,136,137,1104,1414,1415,2315,2324,2372,2389,2390],[103,104,105,107,113,129,131,132,135,137,1104,1413,1414,1415,1554,2315,2324,2372,2389,2390],[103,104,105,107,113,1569,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1561,2076,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,1432,1561,2149,2315,2324,2372,2389,2390],[103,104,105,107,113,147,1104,1561,2116,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,1432,1547,1561,2116,2315,2324,2372,2389,2390],[103,104,105,107,113,1570,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1571,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1431,1554,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1554,1572,2315,2324,2372,2389,2390],[103,104,105,107,113,2157,2160,2161,2315,2324,2372,2389,2390],[103,104,105,107,113,2157,2158,2159,2315,2324,2372,2389,2390],[103,104,105,107,113,2158,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,2157,2315,2324,2372,2389,2390],[103,104,105,107,113,140,2157,2315,2324,2372,2389,2390],[103,104,107,113,1104,1105,1572,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,1432,1572,2163,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1572,2076,2315,2324,2372,2389,2390],[103,104,105,107,113,1110,1413,1566,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,1413,1563,1566,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,1110,1413,1432,1566,2167,2168,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1105,1553,1573,1574,1575,2116,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,1432,1575,2170,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,1432,1575,2173,2315,2324,2372,2389,2390],[103,104,105,107,113,687,1105,1413,1421,1429,1528,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1110,1562,2172,2315,2324,2372,2389,2390],[103,104,105,107,111,113,1432,1547,1562,2315,2324,2372,2389,2390],[103,104,105,107,113,137,1104,1105,1413,1429,1430,1432,1447,1526,1553,1577,1992,2315,2318,2324,2372,2389,2390],[103,104,105,107,113,137,1104,1105,1429,1432,1447,2315,2324,2372,2389,2390],[103,104,105,107,113,137,1104,1105,1413,1429,1432,1521,1522,1553,1573,1992,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,2075,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1110,1554,2315,2324,2372,2389,2390],[103,104,105,107,113,1424,2315,2324,2372,2389,2390],[103,104,105,107,113,1413,1424,2315,2324,2372,2389,2390],[103,104,105,107,113,483,1413,1424,2315,2324,2372,2389,2390],[103,104,105,107,113,2184,2315,2324,2372,2389,2390],[104,2183,2185,2324,2372,2389,2390],[103,104,105,107,113,2191,2315,2324,2372,2389,2390],[104,2192,2193,2324,2372,2389,2390],[103,104,105,107,113,483,1105,2075,2315,2324,2372,2389,2390],[103,104,105,107,113,483,1105,2075,2195,2315,2324,2372,2389,2390],[103,104,105,107,113,2184,2195,2315,2324,2372,2389,2390],[104,2195,2196,2197,2324,2372,2389,2390],[103,104,105,107,113,2199,2315,2324,2372,2389,2390],[103,104,105,107,113,2184,2199,2315,2324,2372,2389,2390],[104,2199,2200,2201,2324,2372,2389,2390],[103,104,105,107,113,483,1105,2075,2203,2315,2324,2372,2389,2390],[103,104,105,107,113,2184,2203,2315,2324,2372,2389,2390],[104,2203,2204,2205,2324,2372,2389,2390],[103,104,105,107,113,2188,2207,2315,2324,2372,2389,2390],[103,104,105,107,113,2184,2207,2315,2324,2372,2389,2390],[104,2207,2208,2209,2324,2372,2389,2390],[103,104,105,107,113,2188,2211,2315,2324,2372,2389,2390],[103,104,105,107,113,2184,2211,2315,2324,2372,2389,2390],[104,2211,2212,2213,2324,2372,2389,2390],[103,104,105,107,113,2215,2315,2324,2372,2389,2390],[103,104,105,107,113,1423,2215,2315,2324,2372,2389,2390],[104,2215,2216,2217,2324,2372,2389,2390],[103,104,105,107,113,2219,2315,2324,2372,2389,2390],[104,2219,2220,2221,2324,2372,2389,2390],[103,104,105,107,113,483,1105,2076,2223,2315,2324,2372,2389,2390],[104,2223,2224,2324,2372,2389,2390],[103,104,105,107,113,2226,2315,2324,2372,2389,2390],[104,2226,2227,2228,2324,2372,2389,2390],[103,104,105,107,113,483,1105,2075,2230,2315,2324,2372,2389,2390],[103,104,105,107,113,2184,2230,2315,2324,2372,2389,2390],[104,2230,2231,2232,2324,2372,2389,2390],[103,104,105,107,113,2234,2315,2324,2372,2389,2390],[104,2234,2235,2236,2324,2372,2389,2390],[103,104,105,107,113,1110,1423,1424,2182,2189,2190,2315,2324,2372,2389,2390],[103,104,105,107,113,1423,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,1413,1423,1425,2315,2324,2372,2389,2390],[103,104,105,107,109,113,2239,2315,2324,2372,2389,2390],[103,104,105,107,113,1423,2240,2315,2324,2372,2389,2390],[103,104,105,107,113,1423,2182,2186,2315,2324,2372,2389,2390],[103,104,105,107,113,127,1104,1105,1576,1578,1584,2116,2242,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,1432,1547,1584,2146,2244,2245,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,2117,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,1432,1584,2076,2098,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1584,2076,2116,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1421,2315,2324,2372,2389,2390],[103,104,105,107,113,136,1104,1105,1413,1446,2315,2324,2372,2389,2390],[103,104,105,107,113,137,687,1413,1421,2315,2318,2324,2372,2389,2390],[103,104,105,107,113,687,1104,1105,1421,1528,1575,2315,2324,2372,2389,2390],[103,104,105,107,113,1116,2315,2324,2372,2389,2390],[103,104,105,107,113,2315,2318,2324,2372,2389,2390],[103,104,105,107,113,687,1104,1105,1413,1427,2315,2324,2372,2389,2390],[103,104,105,107,113,687,1104,1105,1427,1432,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,1413,1432,1567,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1564,2076,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,1432,1564,2257,2315,2324,2372,2389,2390],[103,104,105,107,113,1432,1564,2116,2315,2324,2372,2389,2390],[103,104,105,107,113,1564,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,1432,1564,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,1432,1564,2255,2315,2324,2372,2389,2390],[103,104,105,107,113,127,147,1104,1105,1565,2315,2324,2372,2389,2390],[103,104,105,107,113,1432,1547,1565,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1565,2076,2315,2324,2372,2389,2390],[103,104,105,107,113,1565,2262,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,1413,1429,1430,1432,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1573,2076,2116,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1105,1573,2265,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1574,2076,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,1432,1574,2267,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,1413,1421,1429,1445,1448,1524,1526,1990,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1573,1574,1575,1577,2076,2116,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,1432,1575,1577,2116,2270,2315,2324,2372,2389,2390],[103,104,105,107,111,113,1104,1110,1547,1576,2076,2315,2324,2372,2389,2390],[103,104,105,107,111,113,1104,1105,1432,1576,2272,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1110,1576,1577,2076,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1577,2076,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,1432,1577,2274,2275,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1578,2076,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,1432,1578,2277,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,1432,1547,1578,2279,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1414,1579,2147,2315,2324,2372,2389,2390],[103,104,105,107,113,1579,2147,2281,2315,2324,2372,2389,2390],[103,104,105,107,113,127,1579,2315,2324,2372,2389,2390],[103,104,105,107,113,1580,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1581,2076,2315,2324,2372,2389,2390],[103,104,105,107,113,1581,2285,2315,2324,2372,2389,2390],[103,104,105,107,113,150,1105,2315,2324,2372,2389,2390],[103,104,105,107,113,150,2315,2324,2372,2389,2390],[103,104,105,107,113,150,1432,2315,2324,2372,2389,2390],[103,104,105,107,113,147,150,1104,2315,2324,2372,2389,2390],[103,104,105,107,113,150,1105,1432,1547,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1582,2315,2324,2372,2389,2390],[103,104,105,107,113,1582,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,1583,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1554,1583,2315,2324,2372,2389,2390],[103,104,105,107,113,1583,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1583,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1432,1568,2299,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1105,1429,1447,2315,2324,2372,2389,2390],[103,104,105,107,113,137,1105,1413,1421,1429,1431,1432,1448,1523,1526,1553,1990,2315,2324,2372,2389,2390],[103,104,105,107,113,1104,1105,1413,1429,1553,2315,2318,2324,2372,2389,2390],[103,104,105,107,113,687,1105,1413,1421,1429,1528,1553,2315,2324,2372,2389,2390],[103,104,105,107,113,1421,1553,2315,2324,2372,2389,2390],[103,104,105,107,113,1429,2315,2324,2372,2389,2390],[103,104,105,107,113,1429,1543,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,1429,1435,2315,2324,2372,2389,2390],[103,104,105,107,113,1105,1429,2315,2324,2372,2389,2390],[103,104,105,107,113,687,1413,1429,1441,2315,2324,2372,2389,2390],[103,104,105,107,113,1429,1553,2315,2324,2372,2389,2390],[103,104,105,107,113,137,1104,1105,1413,1429,1433,1436,1437,1438,1439,1440,1442,1443,1444,1445,1523,1524,1525,1553,1554,2315,2324,2372,2389,2390],[103,104,105,107,113,137,687,1105,1413,1421,1429,1430,1431,1432,1433,1523,1526,1527,1529,1544,1553,2315,2318,2324,2372,2389,2390],[103,104,105,107,113,137,687,1105,1413,1421,1429,1430,1431,1432,1433,1523,1526,1527,1529,1544,1553,2315,2324,2372,2389,2390],[103,104,105,107,113,137,687,1105,1413,1421,1429,1430,1431,1432,1433,1526,1527,1529,1544,1553,1573,2315,2318,2324,2372,2389,2390],[103,104,105,107,113,2085,2087,2315,2324,2372,2389,2390],[103,104,105,107,113,2100,2315,2324,2372,2389,2390],[103,104,105,107,113,137,1104,1413,1552,1988,2315,2324,2372,2389,2390],[103,104,105,107,113,131,137,1104,1105,1413,1418,2315,2324,2372,2389,2390],[103,104,105,107,113,140,1110,1413,1429,1430,1553,2147,2299,2315,2324,2372,2389,2390],[107,2318,2324,2372,2389,2390],[104,2324,2372,2384,2389,2390,2394,2415,2480,2485,2488,2497,2501,2502,2503,2505,2506]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"2ab096661c711e4a81cc464fa1e6feb929a54f5340b46b0a07ac6bbf857471f0","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"73f78680d4c08509933daf80947902f6ff41b6230f94dd002ae372620adb0f60","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5239f5c01bcfa9cd32f37c496cf19c61d69d37e48be9de612b541aac915805b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"bde31fd423cd93b0eff97197a3f66df7c93e8c0c335cbeb113b7ff1ac35c23f4","impliedFormat":1},{"version":"a7ca8df4f2931bef2aa4118078584d84a0b16539598eaadf7dce9104dfaa381c","impliedFormat":1},{"version":"11443a1dcfaaa404c68d53368b5b818712b95dd19f188cab1669c39bee8b84b3","impliedFormat":1},{"version":"36977c14a7f7bfc8c0426ae4343875689949fb699f3f84ecbe5b300ebf9a2c55","impliedFormat":1},{"version":"7f698624bbbb060ece7c0e51b7236520ebada74b747d7523c7df376453ed6fea","impliedFormat":1},{"version":"19efad8495a7a6b064483fccd1d2b427403dd84e67819f86d1c6ee3d7abf749c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1eef826bc4a19de22155487984e345a34c9cd511dd1170edc7a447cb8231dd4a","affectsGlobalScope":true,"impliedFormat":99},"65996936fbb042915f7b74a200fcdde7e410f32a669b1ab9597cfaa4b0faddb5",{"version":"f468b74459f1ad4473b36a36d49f2b255f3c6b5d536c81239c2b2971df089eaf","impliedFormat":1},{"version":"556ccd493ec36c7d7cb130d51be66e147b91cc1415be383d71da0f1e49f742a9","impliedFormat":1},{"version":"95aba78013d782537cc5e23868e736bec5d377b918990e28ed56110e3ae8b958","impliedFormat":1},{"version":"524a409ad72186b7f6cb16898c349465cfa876f641d6cb6137b3123d5cfca619","impliedFormat":1},{"version":"ebe84ad8344962b7117a3b95065f47383215020eaf1b626463863b45b4d16e62","impliedFormat":1},{"version":"de5abbc02627403ac5796572520dc2b42df54f1257e7218a9ef37509d9b56972","impliedFormat":1},{"version":"8fefccf7758a68c7053d9830ba385f45300b612807629f3559630988abeca71b","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"0e0542f4d578424ae30421da410c0efb116a350dabaf63c4635ce41f5551ba1f","impliedFormat":1},{"version":"c0191592be8eb7906f99ac4b8798d80a585b94001ea1a5f50d6ce5b0d13a5c62","impliedFormat":99},{"version":"318d19118bf6bf8d088441c948990f53cafc79ed581b78f3d41a0f7a3f5f145c","impliedFormat":1},{"version":"25900318042675aee6d709c82309effd29c995d03f92f8b7a469d38e07c7f846","affectsGlobalScope":true,"impliedFormat":1},{"version":"860814185d89237c84a6bd1e4f108c2c0b2401609a74a33bc7cab14ea4ee9f21","impliedFormat":99},{"version":"e1ddcbacb7658bf0683bca4ebd31bd05f64823712651263bfc75128a45f00ff7","impliedFormat":99},{"version":"5b2f1e43f07ae5590bd899398b23b2d114ed9c3b6b3fb4cb60d4c6216d712b87","impliedFormat":99},{"version":"94c8b35ee85f4a36f1536050dd2eed1490239340f72733d787b84f6ee13b3dbb","impliedFormat":99},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},"8581f0150a40bc1df613e00da0100ee40bfefa9fbc9b230a0076c9a308c244c8",{"version":"52f5c39e78a90c1d8ed7db18f39d890b2e8464a3f44d4233617893f6648e317d","impliedFormat":1},{"version":"a69e8bce30aea7ec98f3b6ddfbc378c92826fede01aafbaec703057c2503ea51","impliedFormat":1},{"version":"faf770b3935c2ba6558b2bb65af5d5de58945d81f496dc1a5938c41a1abb358b","impliedFormat":99},{"version":"380b919bfa0516118edaf25b99e45f855e7bc3fd75ce4163a1cfe4a666388804","impliedFormat":1},{"version":"40de86ced5175a6ffe84a52abe6ac59ac0efbc604a5975a8c6476c3ddc682ff1","impliedFormat":1},{"version":"fcf79300e5257a23ed3bacaa6861d7c645139c6f7ece134d15e6669447e5e6db","impliedFormat":1},{"version":"187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","impliedFormat":1},{"version":"aa2c18a1b5a086bbcaae10a4efba409cc95ba7287d8cf8f2591b53704fea3dea","impliedFormat":1},{"version":"5a0b15210129310cee9fa6af9200714bb4b12af4a04d890e15f34dbea1cf1852","impliedFormat":1},{"version":"0244119dbcbcf34faf3ffdae72dab1e9bc2bc9efc3c477b2240ffa94af3bca56","impliedFormat":1},{"version":"00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","impliedFormat":1},{"version":"a873c50d3e47c21aa09fbe1e2023d9a44efb07cc0cb8c72f418bf301b0771fd3","impliedFormat":1},{"version":"7c14ccd2eaa82619fffc1bfa877eb68a012e9fb723d07ee98db451fadb618906","impliedFormat":1},{"version":"49c36529ee09ea9ce19525af5bb84985ea8e782cb7ee8c493d9e36d027a3d019","impliedFormat":1},{"version":"df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","impliedFormat":1},{"version":"4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd","impliedFormat":1},"9701c8a809fc4799215b4be61e7d77485a6c269ce54d0793c53c0182f6168658","0faed574ac7add37d53fd63688d470292b1c9375500cb1b9d59e40982a6a2d4c","458ba7766b75821db88a9e3a82d1a5a077601407df7074cdae0aaeb420a12227","049ab0431e432e82a8d4e9e67c226a1b06b0b7fbc717947b31de14bd45d2432a","0fece3f69b2d8b9625171e6baded9b978a4c9507fdd12b46d66c2f19ee16d881","c78e57507f352ed3f4b0121f748e0ab2ae86e6379fda3d55c907e9a05ee44d13","7a41ff742ae9b818a2a7a7fb158870393619a5a5fb773b181ea482b631cfb061","c6f9373ea1968b4958b855e30904f2a7d0152b9b477241f523895a4941ba7108","9ceb5d09a35a13c567b0d489ee550a9adc6981d4ed2b32811c7c3dd7ca00df8d","46891b2836f1953416414c93c96fabf621e3b94c65be237eaf2aabcfcee409d7","f3688d50959d31cf849535023dceb5bec1f48eb68b6e9fb9273ade1c64daa1eb","8c98a68934697f4ec08a5d3a293a6771b8f3d963d0c21e6f433f95bda580a314","629b4a81c8e38f30e8144b6a6b37adda26b4669858d3c24748443e1017f6dcfe","5f35695b50bcd8c9b60b67d0ecbc342ac9492119056c10796fb1944bf34109a4","27a47c5461677ba48f59978dfcb094cdfa10f772bbb28cd158c1b4818413b016","48c5eaab5574f1c388873fcb1b6fee5e657ea930867e5cd84dc9593eaf337189","b4492c3409a367c459fadc11294b0eae8fc81463c1be5112b3f0c4afdec4c489","5903f95657f31e779d3f5d4e1568582da03c631e553de96999cab75d3fed1dc1","176eccb49c5e533cac85b5a5bc077f4ca5d026604962ef2ee7ed1c15c79cbdf4","c39cb8aac612362378716ecdebd348df782cc24445e9e8238f5b011518816850","ecb915eb83c1df5622ef6d68214c2a45e17270c395b4f2c1964ecd433a19847b","acd4045783fafe623f2d35019e5dd82221cc34173a43421b30aa99ab2e58d7a3","b2d710eeb8708d0a1d42a4e7f08d569d96e9b172132cf0d57609e03f215ca15b",{"version":"55f16f0ff7dd262a9580fefab47b85fa13bc54ebf21279392fd049c78f7f16d1","impliedFormat":1},{"version":"8c88919faba2b1eb94197a0f3e21d6a827aa574edf4f6c1d0fc402a754749dc8","impliedFormat":1},{"version":"c8044346db3a2a4dcd61dfd96c7cefcb6b1c212ee3e48d474253aafc79970658","impliedFormat":1},{"version":"445f99b5b19666f40eb49bbdedb117a9d9713b91095ea49a371f7941e6a8e0e0","impliedFormat":1},{"version":"d0d35f701530154b2d2c119bd628543e94963a8b43568b61119299eba8f1d4c7","impliedFormat":1},{"version":"d9618b24b11dab78cb0232eef9f3c53cd82e5bc5c998685283265eb82a395b9e","impliedFormat":1},{"version":"a9e6b1ecb19c3094b7ad0075b2910f76e100b9bc04aa7436a33968af73aeba3f","impliedFormat":1},{"version":"7a536e3ebcee17d5d3c3f9466484e97643d81fcf60f1be83a29b7c29326fc076","impliedFormat":1},{"version":"1df8ecdd79b8d5fd6db26c794f25b306a871ca33526967225a7eda4a48384c4c","impliedFormat":1},{"version":"9680c5777715120af62968d8dc0f903e4328eec5518a4e2490caaa1c080ac32d","impliedFormat":1},{"version":"94abb9c4a3661f09b71006cf9f7ace48b80977831f2f81934d40dd81d52c892d","impliedFormat":1},{"version":"f637ba5370e6cab04d4a0b622517bdf2bea791287fb67282eafa0c07cbe55172","impliedFormat":1},{"version":"502d86bc361f90e6255d35a3b7a58dab4130dd1fd0972731d69190968b65e2ff","impliedFormat":1},{"version":"55e52908b8cd39f6d28862d2786ae205b5ff406c5f1652018fb4f4f2193b6834","impliedFormat":1},{"version":"37be5251e2670095621b9a5108db7e200c26edd88ea86fa95a11439a5f72ca55","impliedFormat":1},{"version":"c6ac9cddacb38c304b4e3e6247b02032039ddc35d27e31d11b74452b73ac366d","impliedFormat":1},{"version":"96cf61a20a43a45d6aecdd774c04b62d56b98b68f5b8281ce9cd9cf99400e650","impliedFormat":1},{"version":"ef5530c5dcbe6787a3329c576e87100e920d6eae1b24ea25988d6758c98fdc88","impliedFormat":1},{"version":"0a7e987533de7a29e57d966b7d0d07f483cf03ba5e4c8a0a0793d6730373cb33","impliedFormat":1},{"version":"a298d8f582d84941168e725933c7116b8089b4967c071e86a231dc4d8aeab415","impliedFormat":1},{"version":"7e0f65da240a84018008f2dba1b00d48ea6d20de8034a071431984f96fb714ae","impliedFormat":1},{"version":"d88f975470fb9352bb5c19b1648e820f070449d109a16598173aecf136341b6d","impliedFormat":1},{"version":"fa833a23d1cecc35c100456a55c3842539d6ae24f9750a33c88dcfc1a248002d","impliedFormat":1},{"version":"8f3b798b039eb617b6195743f0a4bc33cce160ba3550b3713fef422942d812d9","impliedFormat":1},{"version":"7cfcc6812e72d9798d39e9be36ced6c35afdc3d7a31891ca782400b34f43e052","impliedFormat":1},{"version":"d54f0d672071e90edb13875ff3115f21716eb3132b25462e92a74108c25c0d48","impliedFormat":1},{"version":"87efca7cf70fc12e5ff28912f86a28f268f8ddd73a9d33c3ac0f091f09bc111f","impliedFormat":1},{"version":"f194d954a36cb19f15e80ac6730b118e57d85f10c05d4374641a85a19dacd27f","impliedFormat":1},{"version":"cf93e7b09b66e142429611c27ba2cbf330826057e3c793e1e2861e976fae3940","impliedFormat":99},{"version":"90e727d145feb03695693fdc9f165a4dc10684713ee5f6aa81e97a6086faa0f8","impliedFormat":99},{"version":"ee2c6ec73c636c9da5ab4ce9227e5197f55a57241d66ea5828f94b69a4a09a2d","impliedFormat":99},{"version":"afaf64477630c7297e3733765046c95640ab1c63f0dfb3c624691c8445bc3b08","impliedFormat":99},{"version":"5aa03223a53ad03171988820b81a6cae9647eabcebcb987d1284799de978d8e3","impliedFormat":99},{"version":"7f50c8914983009c2b940923d891e621db624ba32968a51db46e0bf480e4e1cb","impliedFormat":99},{"version":"90fc18234b7d2e19d18ac026361aaf2f49d27c98dc30d9f01e033a9c2b01c765","impliedFormat":99},{"version":"a980e4d46239f344eb4d5442b69dcf1d46bd2acac8d908574b5a507181f7e2a1","impliedFormat":99},{"version":"bbbfa4c51cdaa6e2ef7f7be3ae199b319de6b31e3b5afa7e5a2229c14bb2568a","impliedFormat":99},{"version":"bc7bfe8f48fa3067deb3b37d4b511588b01831ba123a785ea81320fe74dd9540","impliedFormat":99},{"version":"fd60c0aaf7c52115f0e7f367d794657ac18dbb257255777406829ab65ca85746","impliedFormat":99},{"version":"15c17866d58a19f4a01a125f3f511567bd1c22235b4fd77bf90c793bf28388c3","impliedFormat":99},{"version":"51301a76264b1e1b4046f803bda44307fba403183bc274fe9e7227252d7315cb","impliedFormat":99},{"version":"ddef23e8ace6c2b2ddf8d8092d30b1dd313743f7ff47b2cbb43f36c395896008","impliedFormat":99},{"version":"9e42df47111429042b5e22561849a512ad5871668097664b8fb06a11640140ac","impliedFormat":99},{"version":"391fcc749c6f94c6c4b7f017c6a6f63296c1c9ae03fa639f99337dddb9cc33fe","impliedFormat":99},{"version":"ac4706eb1fb167b19f336a93989763ab175cd7cc6227b0dcbfa6a7824c6ba59a","impliedFormat":99},{"version":"633220dc1e1a5d0ccf11d3c3e8cadc9124daf80fef468f2ff8186a2775229de3","impliedFormat":99},{"version":"6de22ad73e332e513454f0292275155d6cb77f2f695b73f0744928c4ebb3a128","impliedFormat":99},{"version":"ebe0e3c77f5114b656d857213698fade968cff1b3a681d1868f3cfdd09d63b75","impliedFormat":99},{"version":"22c27a87488a0625657b52b9750122814c2f5582cac971484cda0dcd7a46dc3b","impliedFormat":99},{"version":"7e7a817c8ec57035b2b74df8d5dbcc376a4a60ad870b27ec35463536158e1156","impliedFormat":99},{"version":"0e2061f86ca739f34feae42fd7cce27cc171788d251a587215b33eaec456e786","impliedFormat":99},{"version":"91659b2b090cadffdb593736210910508fc5b77046d4ce180b52580b14b075ec","impliedFormat":99},{"version":"d0f6c657c45faaf576ca1a1dc64484534a8dc74ada36fd57008edc1aab65a02b","impliedFormat":99},{"version":"ce0c52b1ebc023b71d3c1fe974804a2422cf1d85d4af74bb1bced36ff3bff8b5","impliedFormat":99},{"version":"9c6acb4a388887f9a5552eda68987ee5d607152163d72f123193a984c48157c9","impliedFormat":99},{"version":"90d0a9968cbb7048015736299f96a0cceb01cf583fd2e9a9edbc632ac4c81b01","impliedFormat":99},{"version":"49abec0571c941ab6f095885a76828d50498511c03bb326eec62a852e58000c5","impliedFormat":99},{"version":"8eeb4a4ff94460051173d561749539bca870422a6400108903af2fb7a1ffe3d7","impliedFormat":99},{"version":"49e39b284b87452fed1e27ac0748ba698f5a27debe05084bc5066b3ecf4ed762","impliedFormat":99},{"version":"59dcf835762f8df90fba5a3f8ba87941467604041cf127fb456543c793b71456","impliedFormat":99},{"version":"33e0c4c683dcaeb66bedf5bb6cc35798d00ac58d7f3bc82aadb50fa475781d60","impliedFormat":99},{"version":"605839abb6d150b0d83ed3712e1b3ffbeb309e382770e7754085d36bc2d84a4c","impliedFormat":99},{"version":"a862dcb740371257e3dae1ab379b0859edcb5119484f8359a5e6fb405db9e12e","impliedFormat":99},{"version":"0f0a16a0e8037c17e28f537028215e87db047eba52281bd33484d5395402f3c1","impliedFormat":99},{"version":"cf533aed4c455b526ddccbb10dae7cc77e9269c3d7862f9e5cedbd4f5c92e05e","impliedFormat":99},{"version":"f8a60ca31702a0209ef217f8f3b4b32f498813927df2304787ac968c78d8560d","impliedFormat":99},{"version":"530192961885d3ddad87bf9c4390e12689fa29ff515df57f17a57c9125fc77c3","impliedFormat":99},{"version":"165ba9e775dd769749e2177c383d24578e3b212e4774b0a72ad0f6faee103b68","impliedFormat":99},{"version":"61448f238fdfa94e5ccce1f43a7cced5e548b1ea2d957bec5259a6e719378381","impliedFormat":99},{"version":"69fa523e48131ced0a52ab1af36c3a922c5fd7a25e474d82117329fe051f5b85","impliedFormat":99},{"version":"fa10b79cd06f5dd03435e184fb05cc5f0d02713bfb4ee9d343db527501be334c","impliedFormat":99},{"version":"c6fb591e363ee4dea2b102bb721c0921485459df23a2d2171af8354cacef4bce","impliedFormat":99},{"version":"ea7e1f1097c2e61ed6e56fa04a9d7beae9d276d87ac6edb0cd39a3ee649cddfe","impliedFormat":99},{"version":"e8cf2659d87462aae9c7647e2a256ac7dcaf2a565a9681bfb49328a8a52861e8","impliedFormat":99},{"version":"7e374cb98b705d35369b3c15444ef2ff5ff983bd2fbb77a287f7e3240abf208c","impliedFormat":99},{"version":"ca75ba1519f9a426b8c512046ebbad58231d8627678d054008c93c51bc0f3fa5","impliedFormat":99},{"version":"ff63760147d7a60dcfc4ac16e40aa2696d016b9ffe27e296b43655dfa869d66b","impliedFormat":99},{"version":"4d434123b16f46b290982907a4d24675442eb651ca95a5e98e4c274be16f1220","impliedFormat":99},{"version":"57263d6ba38046e85f499f3c0ab518cfaf0a5f5d4f53bdae896d045209ab4aff","impliedFormat":99},{"version":"d3a535f2cd5d17f12b1abf0b19a64e816b90c8c10a030b58f308c0f7f2acfe2c","impliedFormat":99},{"version":"be26d49bb713c13bd737d00ae8a61aa394f0b76bc2d5a1c93c74f59402eb8db3","impliedFormat":99},{"version":"c7012003ac0c9e6c9d3a6418128ddebf6219d904095180d4502b19c42f46a186","impliedFormat":99},{"version":"d58c55750756bcf73f474344e6b4a9376e5381e4ba7d834dc352264b491423b6","impliedFormat":99},{"version":"01e2aabfabe22b4bf6d715fc54d72d32fa860a3bd1faa8974e0d672c4b565dfe","impliedFormat":99},{"version":"ba2c489bb2566c16d28f0500b3d98013917e471c40a4417c03991460cb248e88","impliedFormat":99},{"version":"39f94b619f0844c454a6f912e5d6868d0beb32752587b134c3c858b10ecd7056","impliedFormat":99},{"version":"0d2d8b0477b1cf16b34088e786e9745c3e8145bc8eea5919b700ad054e70a095","impliedFormat":99},{"version":"2a5e963b2b8f33a50bb516215ba54a20801cb379a8e9b1ae0b311e900dc7254c","impliedFormat":99},{"version":"d8307f62b55feeb5858529314761089746dce957d2b8fd919673a4985fa4342a","impliedFormat":99},{"version":"bf449ec80fc692b2703ad03e64ae007b3513ecd507dc2ab77f39be6f578e6f5c","impliedFormat":99},{"version":"f780213dd78998daf2511385dd51abf72905f709c839a9457b6ba2a55df57be7","impliedFormat":99},{"version":"2b7843e8a9a50bdf511de24350b6d429a3ee28430f5e8af7d3599b1e9aa7057f","impliedFormat":99},{"version":"05d95be6e25b4118c2eb28667e784f0b25882f6a8486147788df675c85391ab7","impliedFormat":99},{"version":"62d2721e9f2c9197c3e2e5cffeb2f76c6412121ae155153179049890011eb785","impliedFormat":99},{"version":"ff5668fb7594c02aca5e7ba7be6c238676226e450681ca96b457f4a84898b2d9","impliedFormat":99},{"version":"59fd37ea08657fef36c55ddea879eae550ffe21d7e3a1f8699314a85a30d8ae9","impliedFormat":99},{"version":"84e23663776e080e18b25052eb3459b1a0486b5b19f674d59b96347c0cb7312a","impliedFormat":99},{"version":"43e5934c7355731eec20c5a2aa7a859086f19f60a4e5fcd80e6684228f6fb767","impliedFormat":99},{"version":"a49c210c136c518a7c08325f6058fc648f59f911c41c93de2026db692bba0e47","impliedFormat":99},{"version":"1a92f93597ebc451e9ef4b158653c8d31902de5e6c8a574470ecb6da64932df4","impliedFormat":99},{"version":"256513ad066ac9898a70ca01e6fbdb3898a4e0fe408fbf70608fdc28ac1af224","impliedFormat":99},{"version":"d9835850b6cc05c21e8d85692a8071ebcf167a4382e5e39bf700c4a1e816437e","impliedFormat":99},{"version":"e5ab7190f818442e958d0322191c24c2447ddceae393c4e811e79cda6bd49836","impliedFormat":99},{"version":"91b4b77ef81466ce894f1aade7d35d3589ddd5c9981109d1dea11f55a4b807a0","impliedFormat":99},{"version":"03abb209bed94c8c893d9872639e3789f0282061c7aa6917888965e4047a8b5f","impliedFormat":99},{"version":"e97a07901de562219f5cba545b0945a1540d9663bd9abce66495721af3903eec","impliedFormat":99},{"version":"bf39ed1fdf29bc8178055ec4ff32be6725c1de9f29c252e31bdc71baf5c227e6","impliedFormat":99},{"version":"985eabf06dac7288fc355435b18641282f86107e48334a83605739a1fe82ac15","impliedFormat":99},{"version":"6112d33bcf51e3e6f6a81e419f29580e2f8e773529d53958c7c1c99728d4fb2e","impliedFormat":99},{"version":"89e9f7e87a573504acc2e7e5ad727a110b960330657d1b9a6d3526e77c83d8be","impliedFormat":99},{"version":"44bbb88abe9958c7c417e8687abf65820385191685009cc4b739c2d270cb02e9","impliedFormat":99},{"version":"ab4b506b53d2c4aec4cc00452740c540a0e6abe7778063e95c81a5cd557c19eb","impliedFormat":99},{"version":"858757bde6d615d0d1ee474c972131c6d79c37b0b61897da7fbd7110beb8af12","impliedFormat":99},{"version":"60b9dea33807b086a1b4b4b89f72d5da27ad0dd36d6436a6e306600c47438ac4","impliedFormat":99},{"version":"409c963b1166d0c1d49fdad1dfeb4de27fd2d6662d699009857de9baf43ca7c3","impliedFormat":99},{"version":"b7674ecfeb5753e965404f7b3d31eec8450857d1a23770cb867c82f264f546ab","impliedFormat":99},{"version":"c9800b9a9ad7fcdf74ed8972a5928b66f0e4ff674d55fd038a3b1c076911dcbe","impliedFormat":99},{"version":"99864433e35b24c61f8790d2224428e3b920624c01a6d26ea8b27ee1f62836bb","impliedFormat":99},{"version":"c391317b9ff8f87d28c6bfe4e50ed92e8f8bfab1bb8a03cd1fe104ff13186f83","impliedFormat":99},{"version":"42bdc3c98446fdd528e2591213f71ce6f7008fb9bb12413bd57df60d892a3fb5","impliedFormat":99},{"version":"542d2d689b58c25d39a76312ccaea2fcd10a45fb27b890e18015399c8032e2d9","impliedFormat":99},{"version":"97d1656f0a563dbb361d22b3d7c2487427b0998f347123abd1c69a4991326c96","impliedFormat":99},{"version":"d4f53ed7960c9fba8378af3fa28e3cc483d6c0b48e4a152a83ff0973d507307d","impliedFormat":99},{"version":"0665de5280d65ec32776dc55fb37128e259e60f389cde5b9803cf9e81ad23ce0","impliedFormat":99},{"version":"b6dc8fd1c6092da86725c338ca6c263d1c6dd3073046d3ec4eb2d68515062da2","impliedFormat":99},{"version":"d9198a0f01f00870653347560e10494efeca0bfa2de0988bd5d883a9d2c47edb","impliedFormat":99},{"version":"d4279865b926d7e2cfe8863b2eae270c4c035b6e923af8f9d7e6462d68679e07","impliedFormat":99},{"version":"73b6945448bb3425b764cfe7b1c4b0b56c010cc66e5f438ef320c53e469797eb","impliedFormat":99},{"version":"cf72fd8ffa5395f4f1a26be60246ec79c5a9ad201579c9ba63fd2607b5daf184","impliedFormat":99},{"version":"301a458744666096f84580a78cc3f6e8411f8bab92608cdaa33707546ca2906f","impliedFormat":99},{"version":"711e70c0916ff5f821ea208043ecd3e67ed09434b8a31d5616286802b58ebebe","impliedFormat":99},{"version":"e1f2fd9f88dd0e40c358fbf8c8f992211ab00a699e7d6823579b615b874a8453","impliedFormat":99},{"version":"17db3a9dcb2e1689ff7ace9c94fa110c88da64d69f01dc2f3cec698e4fc7e29e","impliedFormat":99},{"version":"73fb07305106bb18c2230890fcacf910fd1a7a77d93ac12ec40bc04c49ee5b8e","impliedFormat":99},{"version":"2c5f341625a45530b040d59a4bc2bc83824d258985ede10c67005be72d3e21d0","impliedFormat":99},{"version":"c4a262730d4277ecaaf6f6553dabecc84dcca8decaebbf2e16f1df8bbd996397","impliedFormat":99},{"version":"c23c533d85518f3358c55a7f19ab1a05aad290251e8bba0947bd19ea3c259467","impliedFormat":99},{"version":"5d0322a0b8cdc67b8c71e4ccaa30286b0c8453211d4c955a217ac2d3590e911f","impliedFormat":99},{"version":"f5e4032b6e4e116e7fec5b2620a2a35d0b6b8b4a1cc9b94a8e5ee76190153110","impliedFormat":99},{"version":"9ab26cb62a0e86ab7f669c311eb0c4d665457eb70a103508aa39da6ccee663da","impliedFormat":99},{"version":"5f64d1a11d8d4ce2c7ee3b72471df76b82d178a48964a14cdfdc7c5ef7276d70","impliedFormat":99},{"version":"24e2fbc48f65814e691d9377399807b9ec22cd54b51d631ba9e48ee18c5939dd","impliedFormat":99},{"version":"bfa2648b2ee90268c6b6f19e84da3176b4d46329c9ec0555d470e647d0568dfb","impliedFormat":99},{"version":"75ef3cb4e7b3583ba268a094c1bd16ce31023f2c3d1ac36e75ca65aca9721534","impliedFormat":99},{"version":"3be6b3304a81d0301838860fd3b4536c2b93390e785808a1f1a30e4135501514","impliedFormat":99},{"version":"da66c1b3e50ef9908e31ce7a281b137b2db41423c2b143c62524f97a536a53d9","impliedFormat":99},{"version":"3ada1b216e45bb9e32e30d8179a0a95870576fe949c33d9767823ccf4f4f4c97","impliedFormat":99},{"version":"1ace2885dffab849f7c98bffe3d1233260fbf07ee62cb58130167fd67a376a65","impliedFormat":99},{"version":"2126e5989c0ca5194d883cf9e9c10fe3e5224fbd3e4a4a6267677544e8be0aae","impliedFormat":99},{"version":"41a6738cf3c756af74753c5033e95c5b33dfc1f6e1287fa769a1ac4027335bf5","impliedFormat":99},{"version":"6e8630be5b0166cbc9f359b9f9e42801626d64ff1702dcb691af811149766154","impliedFormat":99},{"version":"e36b77c04e00b4a0bb4e1364f2646618a54910c27f6dc3fc558ca2ced8ca5bc5","impliedFormat":99},{"version":"2c4ea7e9f95a558f46c89726d1fedcb525ef649eb755a3d7d5055e22b80c2904","impliedFormat":99},{"version":"4875d65190e789fad05e73abd178297b386806b88b624328222d82e455c0f2e7","impliedFormat":99},{"version":"bf5302ecfaacee37c2316e33703723d62e66590093738c8921773ee30f2ecc38","impliedFormat":99},{"version":"62684064fe034d54b87f62ad416f41b98a405dee4146d0ec03b198c3634ea93c","impliedFormat":99},{"version":"be02cbdb1688c8387f8a76a9c6ed9d75d8bb794ec5b9b1d2ba3339a952a00614","impliedFormat":99},{"version":"cefaff060473a5dbf4939ee1b52eb900f215f8d6249dc7c058d6b869d599983c","impliedFormat":99},{"version":"b2797235a4c1a7442a6f326f28ffb966226c3419399dbb33634b8159af2c712f","impliedFormat":99},{"version":"164d633bbd4329794d329219fc173c3de85d5ad866d44e5b5f0fb60c140e98f2","impliedFormat":99},{"version":"b74300dd0a52eaf564b3757c07d07e1d92def4e3b8708f12eedb40033e4cafe9","impliedFormat":99},{"version":"a792f80b1e265b06dce1783992dbee2b45815a7bdc030782464b8cf982337cf2","impliedFormat":99},{"version":"8816b4b3a87d9b77f0355e616b38ed5054f993cc4c141101297f1914976a94b1","impliedFormat":99},{"version":"0f35e4da974793534c4ca1cdd9491eab6993f8cf47103dadfc048b899ed9b511","impliedFormat":99},{"version":"0ccdfcaebf297ec7b9dde20bbbc8539d5951a3d8aaa40665ca469da27f5a86e1","impliedFormat":99},{"version":"7fcb05c8ce81f05499c7b0488ae02a0a1ac6aebc78c01e9f8c42d98f7ba68140","impliedFormat":99},{"version":"81c376c9e4d227a4629c7fca9dde3bbdfa44bd5bd281aee0ed03801182368dc5","impliedFormat":99},{"version":"0f2448f95110c3714797e4c043bbc539368e9c4c33586d03ecda166aa9908843","impliedFormat":99},{"version":"b2f1a443f7f3982d7325775906b51665fe875c82a62be3528a36184852faa0bb","impliedFormat":99},{"version":"7568ff1f23363d7ee349105eb936e156d61aea8864187a4c5d85c60594b44a25","impliedFormat":99},{"version":"8c4d1d9a4eba4eac69e6da0f599a424b2689aee55a455f0b5a7f27a807e064db","impliedFormat":99},{"version":"e1beb9077c100bdd0fc8e727615f5dae2c6e1207de224569421907072f4ec885","impliedFormat":99},{"version":"3dda13836320ec71b95a68cd3d91a27118b34c05a2bfda3e7e51f1d8ca9b960b","impliedFormat":99},{"version":"fedc79cb91f2b3a14e832d7a8e3d58eb02b5d5411c843fcbdc79e35041316b36","impliedFormat":99},{"version":"99f395322ffae908dcdfbaa2624cc7a2a2cb7b0fbf1a1274aca506f7b57ebcb5","impliedFormat":99},{"version":"5e1f7c43e8d45f2222a5c61cbc88b074f4aaf1ca4b118ac6d6123c858efdcd71","impliedFormat":99},{"version":"7388273ab71cb8f22b3f25ffd8d44a37d5740077c4d87023da25575204d57872","impliedFormat":99},{"version":"0a48ceb01a0fdfc506aa20dfd8a3563edbdeaa53a8333ddf261d2ee87669ea7b","impliedFormat":99},{"version":"3182d06b874f31e8e55f91ea706c85d5f207f16273480f46438781d0bd2a46a1","impliedFormat":99},{"version":"ccd47cab635e8f71693fa4e2bbb7969f559972dae97bd5dbd1bbfee77a63b410","impliedFormat":99},{"version":"89770fa14c037f3dc3882e6c56be1c01bb495c81dec96fa29f868185d9555a5d","impliedFormat":99},{"version":"7048c397f08c54099c52e6b9d90623dc9dc6811ea142f8af3200e40d66a972e1","impliedFormat":99},{"version":"512120cd6f026ce1d3cf686c6ab5da80caa40ef92aa47466ec60ba61a48b5551","impliedFormat":99},{"version":"6cd0cb7f999f221e984157a7640e7871960131f6b221d67e4fdc2a53937c6770","impliedFormat":99},{"version":"f48b84a0884776f1bc5bf0fcf3f69832e97b97dc55d79d7557f344de900d259b","impliedFormat":99},{"version":"dca490d986411644b0f9edf6ea701016836558e8677c150dca8ad315178ec735","impliedFormat":99},{"version":"a028a04948cf98c1233166b48887dad324e8fe424a4be368a287c706d9ccd491","impliedFormat":99},{"version":"3046ed22c701f24272534b293c10cfd17b0f6a89c2ec6014c9a44a90963dfa06","impliedFormat":99},{"version":"394da10397d272f19a324c95bea7492faadf2263da157831e02ae1107bd410f5","impliedFormat":99},{"version":"0580595a99248b2d30d03f2307c50f14eb21716a55beb84dd09d240b1b087a42","impliedFormat":99},{"version":"a7da9510150f36a9bea61513b107b59a423fdff54429ad38547c7475cd390e95","impliedFormat":99},{"version":"659615f96e64361af7127645bb91f287f7b46c5d03bea7371e6e02099226d818","impliedFormat":99},{"version":"1f2a42974920476ce46bb666cd9b3c1b82b2072b66ccd0d775aa960532d78176","impliedFormat":99},{"version":"500b3ae6095cbab92d81de0b40c9129f5524d10ad955643f81fc07d726c5a667","impliedFormat":99},{"version":"a957ad4bd562be0662fb99599dbcf0e16d1631f857e5e1a83a3f3afb6c226059","impliedFormat":99},{"version":"e57a4915266a6a751c6c172e8f30f6df44a495608613e1f1c410196207da9641","impliedFormat":99},{"version":"7a12e57143b7bc5a52a41a8c4e6283a8f8d59a5e302478185fb623a7157fff5e","impliedFormat":99},{"version":"17b3426162e1d9cb0a843e8d04212aabe461d53548e671236de957ed3ae9471b","impliedFormat":99},{"version":"f38e86eb00398d63180210c5090ef6ed065004474361146573f98b3c8a96477d","impliedFormat":99},{"version":"231d9e32382d3971f58325e5a85ba283a2021243651cb650f82f87a1bf62d649","impliedFormat":99},{"version":"6532e3e87b87c95f0771611afce929b5bad9d2c94855b19b29b3246937c9840b","impliedFormat":99},{"version":"65704bbb8f0b55c73871335edd3c9cead7c9f0d4b21f64f5d22d0987c45687f0","impliedFormat":99},{"version":"787232f574af2253ac860f22a445c755d57c73a69a402823ae81ba0dfdd1ce23","impliedFormat":99},{"version":"5e63903cd5ebce02486b91647d951d61a16ad80d65f9c56581cd624f39a66007","impliedFormat":99},{"version":"bcc89a120d8f3c02411f4df6b1d989143c01369314e9b0e04794441e6b078d22","impliedFormat":99},{"version":"d17531ef42b7c76d953f63bd5c5cd927c4723e62a7e0b2badf812d5f35f784eb","impliedFormat":99},{"version":"6d4ee1a8e3a97168ea4c4cc1c68bb61a3fd77134f15c71bb9f3f63df3d26b54c","impliedFormat":99},{"version":"1eb04fea6b47b16922ed79625d90431a8b2fc7ba9d5768b255e62df0c96f1e3a","impliedFormat":99},{"version":"de0c2eece83bd81b8682f4496f558beb728263e17e74cbc4910e5c9ce7bef689","impliedFormat":99},{"version":"98866542d45306dab48ecc3ddd98ee54fa983353bc3139dfbc619df882f54d90","impliedFormat":99},{"version":"9e04c7708917af428c165f1e38536ddb2e8ecd576f55ed11a97442dc34b6b010","impliedFormat":99},{"version":"31fe6f6d02b53c1a7c34b8d8f8c87ee9b6dd4b67f158cbfff3034b4f3f69c409","impliedFormat":99},{"version":"2e1d853f84188e8e002361f4bfdd892ac31c68acaeac426a63cd4ff7abf150d0","impliedFormat":99},{"version":"666b5289ec8a01c4cc0977c62e3fd32e89a8e3fd9e97c8d8fd646f632e63c055","impliedFormat":99},{"version":"a1107bbb2b10982dba1f7958a6a5cf841e1a19d6976d0ecdc4c43269c7b0eaf2","impliedFormat":99},{"version":"07fa6122f7495331f39167ec9e4ebd990146a20f99c16c17bc0a98aa81f63b27","impliedFormat":99},{"version":"39c1483481b35c2123eaab5094a8b548a0c3f1e483ab7338102c3291f1ab18bf","impliedFormat":99},{"version":"b73e6242c13796e7d5fba225bf1c07c8ee66d31b7bb65f45be14226a9ae492d2","impliedFormat":99},{"version":"f2931608d541145d189390d6cfb74e1b1e88f73c0b9a80c4356a4daa7fa5e005","impliedFormat":99},{"version":"8684656fe3bf1425a91bd62b8b455a1c7ec18b074fd695793cfae44ae02e381a","impliedFormat":99},{"version":"ccf0b9057dd65c7fb5e237de34f706966ebc30c6d3669715ed05e76225f54fbd","impliedFormat":99},{"version":"d930f077da575e8ea761e3d644d4c6279e2d847bae2b3ea893bbd572315acc21","impliedFormat":99},{"version":"19b0616946cb615abde72c6d69049f136cc4821b784634771c1d73bec8005f73","impliedFormat":99},{"version":"553312560ad0ef97b344b653931935d6e80840c2de6ab90b8be43cbacf0d04cf","impliedFormat":99},{"version":"1225cf1910667bfd52b4daa9974197c3485f21fe631c3ce9db3b733334199faa","impliedFormat":99},{"version":"f7cb9e46bd6ab9d620d68257b525dbbbbc9b0b148adf500b819d756ebc339de0","impliedFormat":99},{"version":"e46d6c3120aca07ae8ec3189edf518c667d027478810ca67a62431a0fa545434","impliedFormat":99},{"version":"9d234b7d2f662a135d430d3190fc21074325f296273125244b2bf8328b5839a0","impliedFormat":99},{"version":"0554ef14d10acea403348c53436b1dd8d61e7c73ef5872e2fe69cc1c433b02f8","impliedFormat":99},{"version":"2f6ae5538090db60514336bd1441ca208a8fab13108cfa4b311e61eaca5ff716","impliedFormat":99},{"version":"17bf4ce505a4cff88fb56177a8f7eb48aa55c22ccc4cce3e49cc5c8ddc54b07d","impliedFormat":99},{"version":"3d735f493d7da48156b79b4d8a406bf2bbf7e3fe379210d8f7c085028143ee40","impliedFormat":99},{"version":"41de1b3ddd71bd0d9ed7ac217ca1b15b177dd731d5251cde094945c20a715d03","impliedFormat":99},{"version":"17d9c562a46c6a25bc2f317c9b06dd4e8e0368cbe9bdf89be6117aeafd577b36","impliedFormat":99},{"version":"ded799031fe18a0bb5e78be38a6ae168458ff41b6c6542392b009d2abe6a6f32","impliedFormat":99},{"version":"ed48d467a7b25ee1a2769adebc198b647a820e242c96a5f96c1e6c27a40ab131","impliedFormat":99},{"version":"b914114df05f286897a1ae85d2df39cfd98ed8da68754d73cf830159e85ddd15","impliedFormat":99},{"version":"73881e647da3c226f21e0b80e216feaf14a5541a861494c744e9fbe1c3b3a6af","impliedFormat":99},{"version":"d79e1d31b939fa99694f2d6fbdd19870147401dbb3f42214e84c011e7ec359ab","impliedFormat":99},{"version":"4f71097eae7aa37941bab39beb2e53e624321fd341c12cc1d400eb7a805691ff","impliedFormat":99},{"version":"58ebb4f21f3a90dda31a01764462aa617849fdb1b592f3a8d875c85019956aff","impliedFormat":99},{"version":"a8e8d0e6efff70f3c28d3e384f9d64530c7a7596a201e4879a7fd75c7d55cbb5","impliedFormat":99},{"version":"df5cbb80d8353bf0511a4047cc7b8434b0be12e280b6cf3de919d5a3380912c0","impliedFormat":99},{"version":"256eb0520e822b56f720962edd7807ed36abdf7ea23bcadf4a25929a3317c8cf","impliedFormat":99},{"version":"9cf2cbc9ceb5f718c1705f37ce5454f14d3b89f690d9864394963567673c1b5c","impliedFormat":99},{"version":"07d3dd790cf1e66bb6fc9806d014dd40bb2055f8d6ca3811cf0e12f92ba4cb9a","impliedFormat":99},{"version":"1f99fd62e9cff9b50c36f368caf3b9fb79fc6f6c75ca5d3c2ec4afaea08d9109","impliedFormat":99},{"version":"6558faaacba5622ef7f1fdfb843cd967af2c105469b9ff5c18a81ce85178fca7","impliedFormat":99},{"version":"34e7f17ae9395b0269cd3f2f0af10709e6dc975c5b44a36b6b70442dc5e25a38","impliedFormat":99},{"version":"a4295111b54f84c02c27e46b0855b02fad3421ae1d2d7e67ecf16cb49538280a","impliedFormat":99},{"version":"ce9746b2ceae2388b7be9fe1f009dcecbc65f0bdbc16f40c0027fab0fb848c3b","impliedFormat":99},{"version":"35ce823a59f397f0e85295387778f51467cea137d787df385be57a2099752bfb","impliedFormat":99},{"version":"2e5acd3ec67bc309e4f679a70c894f809863c33b9572a8da0b78db403edfa106","impliedFormat":99},{"version":"1872f3fcea0643d5e03b19a19d777704320f857d1be0eb4ee372681357e20c88","impliedFormat":99},{"version":"9689628941205e40dcbb2706d1833bd00ce7510d333b2ef08be24ecbf3eb1a37","impliedFormat":99},{"version":"0317a72a0b63094781476cf1d2d27585d00eb2b0ca62b5287124735912f3d048","impliedFormat":99},{"version":"6ce4c0ab3450a4fff25d60a058a25039cffd03141549589689f5a17055ad0545","impliedFormat":99},{"version":"9153ec7b0577ae77349d2c5e8c5dd57163f41853b80c4fb5ce342c7a431cbe1e","impliedFormat":99},{"version":"f490dfa4619e48edd594a36079950c9fca1230efb3a82aaf325047262ba07379","impliedFormat":99},{"version":"674f00085caff46d2cbc76fc74740fd31f49d53396804558573421e138be0c12","impliedFormat":99},{"version":"41d029194c4811f09b350a1e858143c191073007a9ee836061090ed0143ad94f","impliedFormat":99},{"version":"44a6259ffd6febd8510b9a9b13a700e1d022530d8b33663f0735dbb3bee67b3d","impliedFormat":99},{"version":"6f4322500aff8676d9b8eef7711c7166708d4a0686b792aa4b158e276ed946a7","impliedFormat":99},{"version":"e829ff9ecffa3510d3a4d2c3e4e9b54d4a4ccfef004bacbb1d6919ce3ccca01f","impliedFormat":99},{"version":"62e6fec9dbd012460b47af7e727ec4cd34345b6e4311e781f040e6b640d7f93e","impliedFormat":99},{"version":"4d180dd4d0785f2cd140bc069d56285d0121d95b53e4348feb4f62db2d7035d3","impliedFormat":99},{"version":"f1142cbba31d7f492d2e7c91d82211a8334e6642efe52b71d9a82cb95ba4e8ae","impliedFormat":99},{"version":"279cac827be5d48c0f69fe319dc38c876fdd076b66995d9779c43558552d8a50","impliedFormat":99},{"version":"a70ff3c65dc0e7213bfe0d81c072951db9f5b1e640eb66c1eaed0737879c797b","impliedFormat":99},{"version":"f75d3303c1750f4fdacd23354657eca09aae16122c344e65b8c14c570ff67df5","impliedFormat":99},{"version":"3ebae6a418229d4b303f8e0fdb14de83f39fba9f57b39d5f213398bca72137c7","impliedFormat":99},{"version":"21ba07e33265f59d52dece5ac44f933b2b464059514587e64ad5182ddf34a9b0","impliedFormat":99},{"version":"2d3d96efba00493059c460fd55e6206b0667fc2e73215c4f1a9eb559b550021f","impliedFormat":99},{"version":"d23d4a57fff5cec5607521ba3b72f372e3d735d0f6b11a4681655b0bdd0505f4","impliedFormat":99},{"version":"395c1f3da7e9c87097c8095acbb361541480bf5fd7fa92523985019fef7761dd","impliedFormat":99},{"version":"d61f3d719293c2f92a04ba73d08536940805938ecab89ac35ceabc8a48ccb648","impliedFormat":99},{"version":"ca693235a1242bcd97254f43a17592aa84af66ccb7497333ccfea54842fde648","impliedFormat":99},{"version":"cd41cf040b2e368382f2382ec9145824777233730e3965e9a7ba4523a6a4698e","impliedFormat":99},{"version":"2e7a9dba6512b0310c037a28d27330520904cf5063ca19f034b74ad280dbfe71","impliedFormat":99},{"version":"9f2a38baf702e6cb98e0392fa39d25a64c41457a827b935b366c5e0980a6a667","impliedFormat":99},{"version":"c1dc37f0e7252928f73d03b0d6b46feb26dea3d8737a531ca4c0ec4105e33120","impliedFormat":99},{"version":"25126b80243fb499517e94fc5afe5c9c5df3a0105618e33581fb5b2f2622f342","impliedFormat":99},{"version":"d332c2ddcb64012290eb14753c1b49fe3eee9ca067204efba1cf31c1ce1ee020","impliedFormat":99},{"version":"1be8da453470021f6fe936ba19ee0bfebc7cfa2406953fa56e78940467c90769","impliedFormat":99},{"version":"7c9f2d62d83f1292a183a44fb7fb1f16eb9037deb05691d307d4017ac8af850a","impliedFormat":99},{"version":"d0163ab7b0de6e23b8562af8b5b4adea4182884ca7543488f7ac2a3478f3ae6e","impliedFormat":99},{"version":"05224e15c6e51c4c6cd08c65f0766723f6b39165534b67546076c226661db691","impliedFormat":99},{"version":"a5f7158823c7700dd9fc1843a94b9edc309180c969fbfa6d591aeb0b33d3b514","impliedFormat":99},{"version":"7d30937f8cf9bb0d4b2c2a8fb56a415d7ef393f6252b24e4863f3d7b84285724","impliedFormat":99},{"version":"e04d074584483dc9c59341f9f36c7220f16eed09f7af1fa3ef9c64c26095faec","impliedFormat":99},{"version":"619697e06cbc2c77edda949a83a62047e777efacde1433e895b904fe4877c650","impliedFormat":99},{"version":"88d9a8593d2e6aee67f7b15a25bda62652c77be72b79afbee52bea61d5ffb39e","impliedFormat":99},{"version":"044d7acfc9bd1af21951e32252cf8f3a11c8b35a704169115ddcbde9fd717de2","impliedFormat":99},{"version":"a4ca8f13a91bd80e6d7a4f013b8a9e156fbf579bbec981fe724dad38719cfe01","impliedFormat":99},{"version":"5a216426a68418e37e55c7a4366bc50efc99bda9dc361eae94d7e336da96c027","impliedFormat":99},{"version":"13b65b640306755096d304e76d4a237d21103de88b474634f7ae13a2fac722d5","impliedFormat":99},{"version":"7478bd43e449d3ce4e94f3ed1105c65007b21f078b3a791ea5d2c47b30ea6962","impliedFormat":99},{"version":"601d3e8e71b7d6a24fc003aca9989a6c25fa2b3755df196fd0aaee709d190303","impliedFormat":99},{"version":"168e0850fcc94011e4477e31eca81a8a8a71e1aed66d056b7b50196b877e86c8","impliedFormat":99},{"version":"37ba82d63f5f8c6b4fc9b756f24902e47f62ea66aae07e89ace445a54190a86e","impliedFormat":99},{"version":"f5b66b855f0496bc05f1cd9ba51a6a9de3d989b24aa36f6017257f01c8b65a9f","impliedFormat":99},{"version":"823b16d378e8456fcc5503d6253c8b13659be44435151c6b9f140c4a38ec98c1","impliedFormat":99},{"version":"b58b254bf1b586222844c04b3cdec396e16c811463bf187615bb0a1584beb100","impliedFormat":99},{"version":"a367c2ccfb2460e222c5d10d304e980bd172dd668bcc02f6c2ff626e71e90d75","impliedFormat":99},{"version":"0718623262ac94b016cb0cfd8d54e4d5b7b1d3941c01d85cf95c25ec1ba5ed8d","impliedFormat":99},{"version":"d4f3c9a0bd129e9c7cbfac02b6647e34718a2b81a414d914e8bd6b76341172e0","impliedFormat":99},{"version":"824306df6196f1e0222ff775c8023d399091ada2f10f2995ce53f5e3d4aff7a4","impliedFormat":99},{"version":"84ca07a8d57f1a6ba8c0cf264180d681f7afae995631c6ca9f2b85ec6ee06c0f","impliedFormat":99},{"version":"35755e61e9f4ec82d059efdbe3d1abcccc97a8a839f1dbf2e73ac1965f266847","impliedFormat":99},{"version":"64a918a5aa97a37400ec085ffeea12a14211aa799cd34e5dc828beb1806e95bb","impliedFormat":99},{"version":"0c8f5489ba6af02a4b1d5ba280e7badd58f30dc8eb716113b679e9d7c31185e5","impliedFormat":99},{"version":"7b574ca9ae0417203cdfa621ab1585de5b90c4bc6eea77a465b2eb8b92aa5380","impliedFormat":99},{"version":"3334c03c15102700973e3e334954ac1dffb7be7704c67cc272822d5895215c93","impliedFormat":99},{"version":"aabcb169451df7f78eb43567fab877a74d134a0a6d9850aa58b38321374ab7c0","impliedFormat":99},{"version":"1b5effdd8b4e8d9897fc34ab4cd708a446bf79db4cb9a3467e4a30d55b502e14","impliedFormat":99},{"version":"d772776a7aea246fd72c5818de72c3654f556b2cf0d73b90930c9c187cc055fc","impliedFormat":99},{"version":"dbd4bd62f433f14a419e4c6130075199eb15f2812d2d8e7c9e1f297f4daac788","impliedFormat":99},{"version":"427df949f5f10c73bcc77b2999893bc66c17579ad073ee5f5270a2b30651c873","impliedFormat":99},{"version":"c4c1a5565b9b85abfa1d663ca386d959d55361e801e8d49155a14dd6ca41abe1","impliedFormat":99},{"version":"7a45a45c277686aaff716db75a8157d0458a0d854bacf072c47fee3d499d7a99","impliedFormat":99},{"version":"57005b72bce2dc26293e8924f9c6be7ee3a2c1b71028a680f329762fa4439354","impliedFormat":99},{"version":"8f53b1f97c53c3573c16d0225ee3187d22f14f01421e3c6da1a26a1aace32356","impliedFormat":99},{"version":"810fdc0e554ed7315c723b91f6fa6ef3a6859b943b4cd82879641563b0e6c390","impliedFormat":99},{"version":"87a36b177b04d23214aa4502a0011cd65079e208cd60654aefc47d0d65da68ea","impliedFormat":99},{"version":"28a1c17fcbb9e66d7193caca68bbd12115518f186d90fc729a71869f96e2c07b","impliedFormat":99},{"version":"cc2d2abbb1cc7d6453c6fee760b04a516aa425187d65e296a8aacff66a49598a","impliedFormat":99},{"version":"d2413645bc4ab9c3f3688c5281232e6538684e84b49a57d8a1a8b2e5cf9f2041","impliedFormat":99},{"version":"4e6e21a0f9718282d342e66c83b2cd9aa7cd777dfcf2abd93552da694103b3dc","impliedFormat":99},{"version":"9006cc15c3a35e49508598a51664aa34ae59fc7ab32d6cc6ea2ec68d1c39448e","impliedFormat":99},{"version":"74467b184eadee6186a17cac579938d62eceb6d89c923ae67d058e2bcded254e","impliedFormat":99},{"version":"4169b96bb6309a2619f16d17307da341758da2917ff40c615568217b14357f5e","impliedFormat":99},{"version":"4a94d6146b38050de0830019a1c6a7820c2e2b90eba1a5ee4e4ab3bc30a72036","impliedFormat":99},{"version":"48a35ece156203abf19864daa984475055bbed4dc9049d07f4462100363f1e85","impliedFormat":99},{"version":"2a80ab285da5ec06299594edb456abd51ee69a7506278cca24e1ab494a86952b","impliedFormat":99},{"version":"d7c334ef4c10e9f7c8ebed40342b311ae77de6e80febf22a23927c774957b2ec","impliedFormat":1},{"version":"201688a543bd945e4cb8c9affe99e801fcd97b5dc27080b45fa5653a91f02c30","impliedFormat":99},{"version":"39bdb75d428f49bafbbb4ebd79d48a019c8912e31906ef676e88e6d98b4a62c0","impliedFormat":99},{"version":"015af3f63dc78f5e0219debe1e00649f77877327ef539fbab9a5bb1cbb0f1379","impliedFormat":1},{"version":"486057fe8c8d495fb331e7d6c52524888ba890364993153fabf53b1c870ea10f","impliedFormat":1},{"version":"2639085533befdc499c15a8b9f4087fab12eb1a579cc3bd3008222f6be7f9a1f","impliedFormat":1},{"version":"c48f61fc0470c3437ee79f736ca4cb8d478868377e5993dd5cf2c4f153f3fb13","impliedFormat":1},{"version":"bbd033845ce7f8dcbee73a6cbabfa50f6aa96293c7463d48da286b269db587ae","impliedFormat":1},{"version":"d2530a27db1ad726ee2406fa9f67ac32fd8cb359f593e062ff9aad8e9030d09f","impliedFormat":1},{"version":"309a5306c6c1b394938c1fa863ff14fa0e7532688c962a3a8521f0bda102382a","impliedFormat":1},{"version":"e532e8e4ac90ec48d8ea80c54e6360da6be10b56acd76872e53141275d6e0f59","impliedFormat":1},{"version":"331c422934e75dace7f30568554bb7bfe3ca79023c129071f695148404e3e6ce","impliedFormat":1},{"version":"62d760313c4b8b2f610f6c9732ec500ab012a2ef3d2888eef5e67b80eefcbaea","impliedFormat":1},{"version":"d79afb98e94f37cc3b0afbd9cc742b6ed802c230c7e34cef67827a1d57bf2908","impliedFormat":1},{"version":"7d979e73309901b0e93eedaf96ee968c4819e15a31aa8bf891343d93492441ce","impliedFormat":1},{"version":"48bb97ed124a6baf3ec6f65571e68c1a7c53334f4d26f50d99b7cfc0165bca9c","impliedFormat":1},{"version":"20e3a2aebe3815579fab8a8549706c23f70683b6139f6bb5e899d5d96a0e1225","impliedFormat":1},{"version":"4fa1ec89a0fbf7ea9ed432144b1f04021f7275c37d439c02306184b96f430dd1","impliedFormat":1},{"version":"50c42f4c9693d4d18af70f9e768e2a48cc166044209ee8c7e275c3f89bd63c70","impliedFormat":1},{"version":"9f7c68ac36cad40ed178aab8a954b114c8e940258f919d30b9b9ba76c09a50e6","impliedFormat":1},{"version":"697590086f6e294d5b1625b2ef259559f9799c3cff1d5ac424f35988ca8975f4","impliedFormat":1},{"version":"11be2635c1b3bd67cf734fd47fce489d2448e66ea4617b71a21be8f8bb9557a0","impliedFormat":1},{"version":"ab0309363c9030c31c8beebc112301006bb080a926ecac106dc9dca8cddd20a9","impliedFormat":1},{"version":"70a29119482d358ab4f28d28ee2dcd05d6cbf8e678068855d016e10a9256ec12","impliedFormat":1},{"version":"869ac759ae8f304536d609082732cb025a08dcc38237fe619caf3fcdd41dde6f","impliedFormat":1},{"version":"0ea900fe6565f9133e06bce92e3e9a4b5a69234e83d40b7df2e1752b8d2b5002","impliedFormat":1},{"version":"e5408f95ca9ac5997c0fea772d68b1bf390e16c2a8cad62858553409f2b12412","impliedFormat":1},{"version":"3c1332a48695617fc5c8a1aead8f09758c2e73018bd139882283fb5a5b8536a6","impliedFormat":1},{"version":"9260b03453970e98ce9b1ad851275acd9c7d213c26c7d86bae096e8e9db4e62b","impliedFormat":1},{"version":"083838d2f5fea0c28f02ce67087101f43bd6e8697c51fd48029261653095080c","impliedFormat":1},{"version":"969132719f0f5822e669f6da7bd58ea0eb47f7899c1db854f8f06379f753b365","impliedFormat":1},{"version":"94ca5d43ff6f9dc8b1812b0770b761392e6eac1948d99d2da443dc63c32b2ec1","impliedFormat":1},{"version":"2cbc88cf54c50e74ee5642c12217e6fd5415e1b35232d5666d53418bae210b3b","impliedFormat":1},{"version":"ccb226557417c606f8b1bba85d178f4bcea3f8ae67b0e86292709a634a1d389d","impliedFormat":1},{"version":"5ea98f44cc9de1fe05d037afe4813f3dcd3a8c5de43bdd7db24624a364fad8e6","impliedFormat":1},{"version":"5260a62a7d326565c7b42293ed427e4186b9d43d6f160f50e134a18385970d02","impliedFormat":1},{"version":"0b3fc2d2d41ad187962c43cb38117d0aee0d3d515c8a6750aaea467da76b42aa","impliedFormat":1},{"version":"ed219f328224100dad91505388453a8c24a97367d1bc13dcec82c72ab13012b7","impliedFormat":1},{"version":"6847b17c96eb44634daa112849db0c9ade344fe23e6ced190b7eeb862beca9f4","impliedFormat":1},{"version":"d479a5128f27f63b58d57a61e062bd68fa43b684271449a73a4d3e3666a599a7","impliedFormat":1},{"version":"6f308b141358ac799edc3e83e887441852205dc1348310d30b62c69438b93ca0","impliedFormat":1},{"version":"11928e29593cb960a3f96eae627d671bc2f2170d7e0a75622e49cef01622fe46","impliedFormat":1},{"version":"20cc41f51c8ff33d21fb79e8e97b985f5a609bf1451f70cc3ce83e6d5f965ab8","impliedFormat":1},{"version":"3289840aa1a3d57da672099a7f14afbc8ef8bf0dd6e2d243c1aff336196ee4f4","impliedFormat":1},{"version":"9af44a67ddc3ee8dec8a5087f3f5551d771a9bbb28c859ab6e39cbbfeef1486a","impliedFormat":1},{"version":"5ab9a9cccf1c561c6f567977ea85eaae51ebe908069f36fb6c35b8d901ab4058","impliedFormat":1},{"version":"0064748c8fb148e24cd533817dec1ae7b42b1aefcce5c69f7462a55c25bdb9f0","impliedFormat":1},{"version":"5cb0311f0b2f20978411aa8dd28124aa7419c0ab5ea4bef73a2b0310938f52d6","impliedFormat":1},{"version":"e6c940a7a05214c36c7f9c383dcd6ebd345d1c87ab06a10d38163e50b9a681f1","impliedFormat":1},{"version":"d362ff2cedbe3e9ba605cadcb2190bc6bf50c163267071b8ac3a6c8d84317f78","impliedFormat":1},{"version":"df805cd98531520aed08a1b485e17e5a69892c7ead5583a0a301d92cfb80714f","impliedFormat":1},{"version":"57b5763182f9cabb6e31c735665668f8c131f3c7d1aa2b880c40dcbcb34d4ee9","impliedFormat":1},{"version":"a19828b49ac566575268aab52fd7dc0c4e58d77d043dd1c83f82ae8d8b9874d0","impliedFormat":1},{"version":"fa1421553ab8ddba9ce3d8af27741e188e9f8c773b84fa54a05658be564cf6f4","impliedFormat":1},{"version":"eafc9af1fa28dc82ee9e41d81fef98ab08078d8e7de6ac286e458eca3e4b0e98","impliedFormat":1},{"version":"5faebccb33e83ed47d6652b4eb41e3cb6e57f66c9e8740e78c8dc2d6ece62bf6","impliedFormat":1},{"version":"f0cbc9019c7953282a1210dc4e47771caaafdaae8cdd9d6b666a4ec8bd67c914","impliedFormat":1},{"version":"93650916d98eab24b6ea86f2f79731c5fd9578acab81176f1a576bcfcddcd970","impliedFormat":1},{"version":"1bf980acccc086cf3469896843e8df2fd1711a98ce37fc5133c1c5739722647b","impliedFormat":1},{"version":"baabe118c17f263b0a356c34802898eccd3f7ca40b96997aceffe1e35e22cc49","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"d8811e82b5bf65e4f839071467bc752d45d52289f2c2e49ee56de51209051ed1","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"7010271cc20a1bab3f96b8ed9df55a2d5281d588432343bf656d3d46fb3b6e92","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"7010271cc20a1bab3f96b8ed9df55a2d5281d588432343bf656d3d46fb3b6e92","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"8c95ed06561efa2ef61a233502be995190f3492d3cde7643aabcc4fc80888153","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"7010271cc20a1bab3f96b8ed9df55a2d5281d588432343bf656d3d46fb3b6e92","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"aeae2c892e75a91a66ef4c33cad48eac4df713f39fa6640bbe30aefd8d068f31","impliedFormat":1},{"version":"dcd3a1a5b14e905d2c14c0304e03b4239277536406701c36331130710974af97","impliedFormat":1},{"version":"7e176b34473a960c96ab4688774b371d348534ccbc7de76bf218c96a706eb441","impliedFormat":1},{"version":"12895ea8bfe211b655fd579c833d21caaefb55fbc8b0d042f651cfb8f8424286","impliedFormat":1},{"version":"245000cdaa0e0f759e45745d7dac85c90f929bd6ccc16457703c362259dcb0d9","impliedFormat":1},{"version":"b30047932ac48c6a8c61ba49baa29d8066148462489fb752cd54d4c07938da7a","impliedFormat":1},{"version":"eb91981d121da4c3599e678f2d161d7785e4a484e26debd4bbf76793bdc9ae44","impliedFormat":1},{"version":"0eedef2ce9102ec35928c757e3cf27e09f3ca04f3bb7d4a32123f2fe7ea37e30","impliedFormat":1},{"version":"b9b8f1f897989e30f4c91f18990cf1828dc0832532c5479502606ca52a25658f","impliedFormat":1},{"version":"b24f299d182f14a7f88c6c90f7d654c1c85eb6d3813479e182154d35cb49c809","impliedFormat":1},{"version":"e1f1b1c8b61cead248779c6a541e637a368bdf5cfae5bf4c4a8accad2a500054","impliedFormat":1},{"version":"6af0479ea02058353cd8414c6c6f36adf61ee0516864c930a6187e8ccfce49e6","impliedFormat":1},{"version":"1eebb499f94f45857b355e3865503a671eb9f1955987701b2492f9ebbb19ee35","impliedFormat":1},{"version":"5c0254455343a2164c7d7a6c1d43c2319d329edd8177b4567054bd9cc18bf083","impliedFormat":1},{"version":"d1496a79ffc3e1c5f8898817c5f87efe3070f3f6bfdcf3c13ec12f9141cce565","impliedFormat":1},{"version":"f5d0ab6a6b996911c87a781d43bddb86c19b3332d47ba05c8978c1984700dfa9","impliedFormat":1},{"version":"fa820e260726225d1692a06cef6e1d915c3e8a41de7e9e6a1d4575d0f85121ef","impliedFormat":1},{"version":"d1d949485ad8b723a439d4fbfba00cdf9c20928e9de72bac4061173eedb7246e","impliedFormat":1},{"version":"e60233856285c83d8337d2272081ea908c16ac12fc4040c977a8ab11c749bcaa","impliedFormat":1},{"version":"44b381acba23994aca7f6904680093716baab24e476b3fe9e9cbae8e8c47944d","impliedFormat":1},{"version":"09e058a6d706073073c018ee3c9f0a1ad393a437ef18a325c1ae85cb29d34cc5","impliedFormat":1},{"version":"90250a0987fc980d117820d9e1c89c0f7656a15e297dc15d392e87dbd97ada83","impliedFormat":1},{"version":"2b4276dde46aa2faf0dd86119999c76b81e6488cd6b0d0fcf9fb985769cd11c0","impliedFormat":99},{"version":"38d4cff03e87dc58bfd50ffe5a3fb25e6e6d4136a1282883285baf71d35967c5","impliedFormat":99},{"version":"5ecea63968444d55f7c3cf677cbec9525db9229953b34f06be0386a24b0fffd2","impliedFormat":99},{"version":"6ea9c8bf2ae4d47a0dbc2a1f9ac1e36c639b2ac9225c4d271c2f63a2faf24831","impliedFormat":99},{"version":"ce7ce51836fd2f508b0bcddcaa0b8b780da883d7a1239e17538feca295409eaf","impliedFormat":1},{"version":"9e5a833bfb54b4a3370486188a3d12e134c5b29b3364dade3a81b9451ddffd1e","impliedFormat":1},{"version":"b7f70ef6d1a9ce25d100f75f1288c2c444fde889f5caeb2c8a49f70194f44da6","impliedFormat":1},{"version":"4d09be69ea360a371a6cffc15f02f9f159bd64507c6d457133a73f663e41c25f","impliedFormat":1},{"version":"49838f8f6ed3a2653c01022f7e8a58ab5e560d73064303fbdea7b3eafee42287","impliedFormat":1},{"version":"334b9c6b47c119e7d44beb54ac4205db17dc6b24794e4f06e04a68711954d863","impliedFormat":1},{"version":"e14bebaab3c57f3268f92aa47423b225061c40524d337bf86d16936b924c7977","impliedFormat":1},{"version":"a439861fe62f996adf814884947650650fc436898af722e1918e328349fd6417","impliedFormat":1},{"version":"d8f2d457913790a6059dc6ee295aa9a0eb1b7754fea88c24fcfaebc9680cf7f0","impliedFormat":1},{"version":"260a47ebfd3a752a1230a7058c64fc381e4a6a8bc96f7bb7dabbf7af87202976","impliedFormat":1},{"version":"6fdf0d3132926f10124404134840fa72fe00870da3328e349b8060940382c2f9","impliedFormat":1},{"version":"bedf7e7e31a641654db1a556fb77dcc15180f19514fb0d2ed39f157cb0fc301a","impliedFormat":1},{"version":"d1362b8db27eb8fa56916a4e7875fc8a025a759f71865b424c5c0b5ad91ce73f","impliedFormat":1},{"version":"25c4f1af91513fa2c2423d43589c40145b1047b52c075dc58bdc42c2bc41bcb4","impliedFormat":1},{"version":"070eca51dd0a478ddd7cc1cf23c31f4a40ff1fee9465d2d354fedac657ccb2dc","impliedFormat":1},{"version":"91b487cd1a6e7607465a977fdcdf339d8c6225900a1d213dd41936ca3d048836","impliedFormat":1},{"version":"af28cd496b08df6780b3303a74b1d3db3064d8bba9293cc815e92291fc160805","impliedFormat":1},{"version":"ca0fe4ef002f68456b7f92ef4686ef098854137cd58bfcaec7f9ae191148bf1d","impliedFormat":1},{"version":"9330046da4d6724db3c7ef4655b01545f69f12ea9b0eb74d498512244be94727","impliedFormat":1},{"version":"a879c9b09499eecb06df95a87ac084f699e125532ff4f7267ec57ea0da8642bb","impliedFormat":1},{"version":"cea6f3dbab165b13ee7094a5c688d656b411eb0c599a3f8e67f2dbbc53b5663f","impliedFormat":1},{"version":"5b9eb0b64742b99fa2bfab2d1256e99219fbdcea283fc33a36baee703ef3d757","impliedFormat":1},{"version":"f73c97ee355afdb250266e82f79e6d987d23d9a84273b17857c3e61114a76568","impliedFormat":1},{"version":"7c5834846a2e40307b2afdf9cc4d7aac1b16df7f1ddb101307273efb9ed8626f","impliedFormat":1},{"version":"e5cb8515e1b89e67f61ce60306635456dc0ade7e3ee4c1a21ef318d3b543eec9","impliedFormat":1},{"version":"0fbb5ef40d55bfb6f7a5c2dfc74211bbc610a3ee1eb421185d3e9a322f69a142","impliedFormat":1},{"version":"c225b50585f0fc6f4687b62f5511881df9f3d063f60f2f3af727dff2e690d519","impliedFormat":1},{"version":"0331c6f3ea4740df86020283f0ff05cc4bc755e6310bfc9cbdc10c0b27c2c08f","impliedFormat":1},{"version":"5662a627ac042ee96e4627f855f76b08bdcdacb6f5c546a6692fe4629dbfd1af","impliedFormat":1},{"version":"ed673eb6be36e1804151a1e42478c83dd0b92e0cc265bad9dfddb3abe51002e1","impliedFormat":1},{"version":"0485ef83541c8cc016daa28f7ebe980f698d903151dc50a7efe7ddf023815681","impliedFormat":1},{"version":"1c906055b32d01ec3c6ffd245d9f5d5d2387de23a9026e6849c35729d5d1252c","impliedFormat":1},{"version":"aaa7fec72a5ded92db87991af37956fc8255e9b8da4d9165445edb6e5ada22c4","impliedFormat":1},{"version":"6acc9e5761737d08a7e163c43d2ac814eb63ab1d6450594e9ce8e66f49e1eddb","impliedFormat":1},{"version":"c4aacb40f647365929a82cddb1e51fea7c8b530183ffad74382c9648c03b56a4","impliedFormat":1},{"version":"8c1bd8efad0300b1d4a652fb5aa1f958931d9009c9ce89d98019d7a8b55dd757","impliedFormat":1},{"version":"0e1a8479fd2c48803a987f637ebb64089c526b8e53d7974160204e6dadd8ef94","impliedFormat":1},{"version":"b9d6eb16792ce9cb9229c083db7c9dad07e4d598ecf3a891933942e7ad1fb070","impliedFormat":1},{"version":"cf75c3422ccc5362f4911467a896f4f77f7cc1bcfdd074046efcb3130ebdb8e4","impliedFormat":1},{"version":"2e0d32660751155f11c422e203181d899fb70685334dd688c17d158f31b5b0ea","impliedFormat":1},{"version":"3992ab15b523b97d436a282b1df2f2b9f20c9ef9e44d0c23956c25aca77d2076","impliedFormat":1},{"version":"68744a94adb00cff7991566d8b0467fdcadd642c7221ce963c8de8f730c47251","impliedFormat":1},{"version":"859d3d75d172b559d96b45b16b260905984693ec0798a2062211542355858498","impliedFormat":1},{"version":"b8070a737ec60850d4f04568a45665a2cdc692a6ea7545d7c9ac6c8a25d54b38","impliedFormat":1},{"version":"b4ea4a558b069b4035bbc2bdebc370205266a830dcf1c90cb7ead22da288d074","impliedFormat":1},{"version":"5a39278b38da2df895e9e2e6fffa33f50c32516732275e62fcad0d5f2b50acc4","impliedFormat":1},{"version":"aaef2354583399610f0cfffd6683fa200f43f9055bd4dfc8c9bcdbba89c93aaa","impliedFormat":1},{"version":"fdd33dc882f735aeac4e1c6ccde0b8d25b07b1caa7e560adcde7fde1df1e8e59","impliedFormat":1},{"version":"4ef318a4a4e1e127d7bd4c7099f61e5e38487b0164aad0eae92794de0e220a5f","impliedFormat":1},{"version":"73a0ee6395819b063df4b148211985f2e1442945c1a057204cf4cf6281760dc3","affectsGlobalScope":true,"impliedFormat":1},{"version":"d05d8c67116dceafc62e691c47ac89f8f10cf7313cd1b2fb4fe801c2bf1bb1a7","impliedFormat":1},{"version":"3c5bb5207df7095882400323d692957e90ec17323ccff5fd5f29a1ecf3b165d0","impliedFormat":1},{"version":"befa24d0fe8eb1c15032e835c25acb8ae19ae101b55891226786b78884036440","impliedFormat":1},{"version":"431384f165550e249a024da1e4f5ecf67a9ab9bd80824b9198b991600442c0df","impliedFormat":1},{"version":"4300901bc259f4793bbae2d30b57367e6cf28873a8b59a35ec466cf5141bc71e","impliedFormat":1},{"version":"a5cdab3f89ea55f22485d6c6396b9477b8fddffb8096d869a2c3eb6a0e9f339b","impliedFormat":1},{"version":"0f45810ad7155f5cf85c3b99d8837fae35bef7d711f122a362bdbf9e30484cff","impliedFormat":1},{"version":"d12a37c3bbf382d20cdafe0f214cd2aa06cdc45a1753bf975ea44595b8852486","impliedFormat":1},{"version":"3f11a6347ba9d4ff1810cd6e8724295f2b5b92226279e33288f0b81c06854b11","impliedFormat":1},{"version":"8709b29708d70d23bd2f6bee7439d1d63aadd3bbbbbac60ecc49cfd114492b83","impliedFormat":1},{"version":"63603b74a5c670f0b329da6cae9613e71315ec3a663a5460d9892a24ae63fce8","impliedFormat":1},{"version":"474597287b297a39012f8b0fa009e7804716ed3d98b4f6762e62c6af03edbaae","impliedFormat":1},{"version":"3da5744f338a502b7a30a8f7d2aeb8dabe9f291be198e2589f0ee6eb462b6c49","impliedFormat":1},{"version":"c1c5dfcacaef9132803b17ea1cf5f2053712379342c872e4aaefd53141c556cc","impliedFormat":1},{"version":"1eec8cf56d2093c649743c7697af7492818af939a54f9abf98ccad3403232a2c","impliedFormat":1},{"version":"9b72b48165071801b8ca583e8d0a54171628e6ab6b30a6bd18878add23fe0cda","impliedFormat":1},{"version":"7f49c8e8cfe9d10753fc2d20dcba79fd7b28100248c8604daf1fbc787582da5f","impliedFormat":1},{"version":"704243b2f7a509a2f624ab1134a5601f821a39e1c9f1409e0a28eb06e98ac49a","impliedFormat":1},{"version":"d2456be08bf14016213e583c1ef6f8b7862ee1945073418ba333332c2a387bd9","impliedFormat":1},{"version":"b92ad137770ccbe702dd1cee2cec758cc420aae8650c89634c2125caf569041b","impliedFormat":1},{"version":"1add518ade30764380038c2d9aa0ec37d7928dbccae9ac123c4f8ea0c7f7932a","impliedFormat":1},{"version":"5bcbeb26010db8f17f012b0e77790f082c316a346f53d4ed75c342b14e69c8e6","impliedFormat":1},{"version":"3c799e898646a0555a7985f291b5064b7f335681f4ee3a796ea6deff8a73ab13","impliedFormat":1},{"version":"3ea3feea868f4f946bf6716b08886c2d0a22fd6c189bc9ffac2e8b31a9ddcdde","impliedFormat":1},{"version":"64c6e64233faa6e3b585f7b49794a4e8a9d0179273cda83e7b14aabcf6f113c1","impliedFormat":1},{"version":"07ceab1b624380efa77e39a01059bee7a792c94b5dd25baf13f1251efd2f4998","impliedFormat":1},{"version":"fd006bbb36d0cc0fbb782e0412404db082ebd1ac6800fb4b45bb224feaf83cac","impliedFormat":1},{"version":"3f72825d097b9c4ab66e25d105ad242d564391d77046861efaa361b1c7f19f69","impliedFormat":1},{"version":"9858d6b1cd99022bdd06174633253e7ccacf1ed62a15adc91ba148293f9804d8","impliedFormat":1},{"version":"4aa8fe27a526a30d218700ec9e5c09032ab40bf0a18cb4fc4b05f773a1e346ca","impliedFormat":1},{"version":"0597858092c8c1c38653961b31ef9e1550a4cba33da9b03e0b26a424b9d565f6","impliedFormat":1},{"version":"e1e73fab0b8967e5849fcfc6c7de0303614410ee427edae0e36053ecc2533548","impliedFormat":1},{"version":"21316facbb79ba139743466ee6194f3b8f9ba797a2b55af86587161533b46b06","impliedFormat":1},{"version":"17217ee1c357567b7a3a16bb2e179ef01dd41fd28fff1558739bc340577f10fb","impliedFormat":1},{"version":"5a25f38411dcb5454f5c65110b4f6ec13af072cdf8febaea3829057f91ccd332","impliedFormat":1},{"version":"fd3170f4e448620561e53ac9e6447b35380d19ca9bcad219aab7e9add85a7187","impliedFormat":1},{"version":"f476947becc7ea284038fa40c427377d093c965ba93c5fd41f97b13b5045a1de","impliedFormat":1},{"version":"53407709f23c0357090d046b42f584cfff0d53696f0069bfe8469132b6142bfb","impliedFormat":1},{"version":"90a1100f09a52b5910bbb6a99b2e38f401b12de60f62af0afc7d034cf993b631","impliedFormat":1},{"version":"001dfa751f23df81842cdb8c26d561075c5802fc533e9dbb3ee73f7da3b5adcb","impliedFormat":1},{"version":"eebddc56f0570ba1a5538cb83507cac13ab7f24759e784da8af667d133409ff1","impliedFormat":1},{"version":"01794a05b7afd9db0848393a716ca3066cb32c4fc6d7ded02d70d8f2d4eb44c0","impliedFormat":1},{"version":"4a495b3b83986729f7ccb8c56e818e4c45d7d9050ea5827c23f6a89cd71bc529","impliedFormat":1},{"version":"bfc25a76dd65759c7401cd2fe4f070af193e8785c1fbf0a44014476a74190801","impliedFormat":1},{"version":"e59dee4d2b27a22b2bcb9020210a7d065073f09ce609da7cd402c76aad73d883","impliedFormat":1},{"version":"394ebdc9deae76a1c3e4ba740d60f137a46bf62d77e0fed50b079c34cb907533","impliedFormat":1},{"version":"8a0840a8819a08a9b7af9e053df07230542906bd2aab74bd3dada375f86c75e7","impliedFormat":1},{"version":"9ab6534198d7bc487bf5e990c6f1b971475d75a321f0a34f0f3f73a3d5e42265","impliedFormat":1},{"version":"5546f701029060f659bc0366cbc2cf212aed72316f1b41744740462ed416751f","impliedFormat":1},{"version":"a55dcf8d5c65de8a5326cd6f20a620b98ae5bdf86848a586902320dfa612b33d","impliedFormat":1},{"version":"9488e08ce992e9e64976132daa5275c57bc3b91b3fa37fc33b81585617daf727","impliedFormat":1},{"version":"fc9c2fd31b900c7fe943948a532ddbcd3b7e687f71768223c889596d11ad8dfc","impliedFormat":1},{"version":"cf5d4a9d3befa0c6c34a5efa3489fc7ca003100e05b2a2200c812744dc4b2920","impliedFormat":1},{"version":"73ba02ac9e145564d4e91fe90d07abdb6c3d565f213907cdd81298fbb01ed73f","impliedFormat":1},{"version":"d600313e3c07f919782e2cefcee7dd9af336e847d61d7bb6f77b813b08d4558e","impliedFormat":1},{"version":"c509b5642db6151661020758ac12bffa7652ffde20014b621a17a38ba2a39e32","impliedFormat":1},{"version":"df9d5f06a1692717762ca9f368917924fdaccfdfced152804d768eff9baeb352","impliedFormat":1},{"version":"34fec0d3b9abe499f5d53f1ae7a6c28d34ac289e5cff6f17587da846823cecb0","impliedFormat":1},{"version":"9ea3742314159f08b93e3dccb7fdba67637ba75736c12923d4df3ec9f40590ab","impliedFormat":1},{"version":"bc55f374f2b27277afd0ebdf0e503faa20ac18e81d15ac106e443ab354d3e892","impliedFormat":1},{"version":"4055e5f20cd88d6a1b97dcc9ef0708655901c23c974c17e7cb5a649ebb960b47","impliedFormat":1},{"version":"e35562032ca67f79d83bb8e2b86b61dfcbac6a914ce15b0e2235e6626dbd49f7","impliedFormat":1},{"version":"6fa98c19548b13e63df64ea3b9dcdd5b456059f2ec6ba14de67ba295c3884a9f","impliedFormat":1},{"version":"39fa2f68f5480e3f2dde09f8cf03e37c0b79479247c7a169ce833a39c3da38a3","impliedFormat":1},{"version":"34166077f3e6c2e0425c493ac22f674bb82bf02346f73dfab87d948e22f935ea","impliedFormat":1},{"version":"470b0bf94d9a87acee352d3064e5a58ca17c0e724ac322f99277df7d61def640","impliedFormat":1},{"version":"ba3735044629473bf01fb4eaf08e7feda3f79b00ed8e940567ded154b3ef7a92","impliedFormat":1},{"version":"95380bb77008f7bea0cb26c8419d7d9a4059dd1b052ad398cc8206307488321b","impliedFormat":1},{"version":"9ab2a9cdf761d55b5d7e6880a2eec20e50605202a34ab46cc8e3724c463ccf18","impliedFormat":1},{"version":"33f56865801c2354a9445b2f73ad504ca30bd16d9ca1677e80e14f9b1d76d456","impliedFormat":1},{"version":"a732278091b58df250bf1c50f11967bff74125ad4908da145934b5f2556328b2","impliedFormat":1},{"version":"9f53d732e2428018d73f09349e131c752387390bffff810fd0e0e8107337dde1","impliedFormat":1},{"version":"b4f5d434244ce624d089903f43f6fd9a1968afc9672443481e01743ac30fc135","impliedFormat":1},{"version":"72cc6feaff60559b953dd5ed55eed369037a02e1e75cda3845ca5de197a95a98","impliedFormat":1},{"version":"238284e79622aa34170eec5478e831fe63840fbb21e4300fb93b20b6c0902f35","impliedFormat":1},{"version":"d6503005937bbcc00bf5e2f5bd8d8189874aa824fb97499b2bd6c3b2eac1a043","impliedFormat":1},{"version":"bf9df1f095e33429aa80a7b057dad0185eaf472153408e0dde1f3e1986384686","impliedFormat":1},{"version":"1c9447cb3bc13bcccc77f144ade5a14f22fdfa1fb4f70f329c390e83b7b75a60","impliedFormat":1},{"version":"0ed013647437fa6f99ff128466bc63da7617d424996363b93f802c46a629843d","impliedFormat":1},{"version":"9ce2630805a121ede26ab84c426011dcdbcb653cf9205c8ca76a7a3893911055","impliedFormat":1},{"version":"be027215c5ee2b49b7489152206927df2b445fa7bbfcc34bce0977faf343ffe2","impliedFormat":1},{"version":"03925a73fad9827b2ad7812d6da4119fede2006e792fba0e59921bf55dde9bd8","impliedFormat":1},{"version":"c9f7ea1441283c00853bde21aebda6882b05e33c6168c93baa2d9b97ca530d43","impliedFormat":1},{"version":"f7f295733dc582028cbdad1e143f235bb85057d2352f7eaad46913b7c633918f","impliedFormat":1},{"version":"3b75242f88aaa3f3f32906223e09604e289fa6307dcd408320c9ed5c1b8189b5","impliedFormat":1},{"version":"6c0e51147f9b5769564aa829ee92beb65d4fde7d7241ec477a5c90dd09bc88a8","impliedFormat":1},{"version":"bb23f3a09f655673fa8c540028fd8cd016a9f5193b99b8dff1fa5233c240f55a","impliedFormat":1},{"version":"17c437eede5b2b3794cee847a4813d34c420cd1d4928b7a1e7322914112c949a","impliedFormat":1},{"version":"5eae95c41ccab2837381bbbf6ad8d2268ba05b65e760a3d0778a17b4d19965e5","impliedFormat":1},{"version":"43859204f2f5c89806116b87e6258aa9a9632d276a4e6f31585e0bcf79f6d81c","impliedFormat":1},{"version":"e175be3dcc5e0bdff3c26ee6ba0df95317312500e77ba770a2bc2e6a6c1ed3e4","impliedFormat":1},{"version":"8c4a91c016dc8cabd9338b7e4f2d1c704e24def84cf11c364eb44182d6ef5571","impliedFormat":1},{"version":"425407e1fb17c6762a6826e200882ab78ab254c06a6444bcb5a3edcf46ceac38","impliedFormat":1},{"version":"cf83180e6daaa29b5d127036a28a163b7dc5847a091f39719b39186a2ec35e7e","impliedFormat":1},{"version":"5a966cbed46a89616d3440cb50faefa551bb97b638ef26463d83a26b80c85584","impliedFormat":1},{"version":"0d8c8a56bd5161dbf6e10ce058d9dfe704ba946dc0d96a06a5b1c24c1d263d9a","impliedFormat":1},{"version":"476a6e9be301a83ea80d7f6475f2149a791e5d0bccc4653e627858ef4de62c0c","impliedFormat":1},{"version":"8c544128f4b4bf0764171b3be269511a3ae1c7ed0a3a721d41a690fdd7be929f","impliedFormat":1},{"version":"b2ea16e5a45b52fcd1c9fe6ad92095043d4d14b6ba661e34b8989f56fd9e43b9","impliedFormat":1},{"version":"d41897ad53cb52a13672bded07f42ce1c26b2e09776f8e6476c3f72f2d66dabc","impliedFormat":1},{"version":"1696982a830aea0e8e2f24ed5948fcec04ffebdb488bd93682313cde65cd4070","impliedFormat":1},{"version":"1e0bf6a0392611a0471a2f5ee45bd0b37b7100f112b5cc6a39d133beef733166","impliedFormat":1},{"version":"3ef07627f9a75f417148c2b65636c85c1995fe1130b194f1ee3e78fe3fbd8e80","impliedFormat":1},{"version":"d41897ad53cb52a13672bded07f42ce1c26b2e09776f8e6476c3f72f2d66dabc","impliedFormat":1},{"version":"3fa41f1b472d6e2719ac119190cc3e2ea4624b215fd15ea9e24fa5b7f8ec92ff","impliedFormat":1},{"version":"a0ad754b3bd67e8319030bbd6fe4749403ae0957153aa9f8f2c3ef72367cb0e7","impliedFormat":1},{"version":"515a4b762ab67fbb967fb5cf5e04ea3bab01b8757f5f0a3b834ff57f64a43217","impliedFormat":1},{"version":"9ff0d5d064fd804259fcad19909310bec4f6aec74c4970717aa604a159f84211","impliedFormat":1},{"version":"8ca03f479209baed02f5887a9e8222d4928850fbb14f79d3efe90d7a47028ba2","impliedFormat":1},{"version":"8341b97d5144a2dd38aa90c0d3a68f513faeefd56c758ddcde9c4d5b509674ed","impliedFormat":1},{"version":"34b5a3984848f246d14980ce87dea6e65318c32d5d33524740554c07ad9887c1","impliedFormat":1},{"version":"c6ca371b4283afbdd3a50f79e622879c00ad47514e242b03fa5179c7eb95dce9","impliedFormat":1},{"version":"e1e33525d37412411fba373f748ad91a6227943562ecba5e5e15ec140b220a44","impliedFormat":1},{"version":"523064befafbbe3bd4531dcf4fcdfa8e8bd25b6254d3da82ca8daf28e929cf45","impliedFormat":1},{"version":"bbbabc262fe1433817034b7225b9ab813063089e7faaabee72bef82178427b6c","impliedFormat":1},{"version":"4abbabd14e5ecb558fb4d8336fef5b2f602cf2a473a4260c5791537b3336a120","impliedFormat":1},{"version":"3559692171981b2101f0632726cabecc990914a9bd9abd4ceda20262811e4739","impliedFormat":1},{"version":"c48ca18e123cb997aeccf59222900780f64f83ab3c09ad585925b4962b15d250","impliedFormat":1},{"version":"401a63669e727547540d3b7baa92a52baa3347da9a306caf2f95700233b53a4e","impliedFormat":1},{"version":"b2233cd6b982a2ed3025edb1cde0f00c2d0d6db1fa8d7fd6b8ff9faf55fff742","impliedFormat":1},{"version":"97a1e967f06b13f2a8d7a3d75d89321458f761da80348c2804efb7e741225b87","impliedFormat":1},{"version":"c99b06fb20ce897f44d6777c61323130a0a21cafb690ff7c7304ea4d0d8745f7","impliedFormat":1},{"version":"82d152b72a86c2e9fb8c04c47716b03d4331c7ea00741d9093e667542c93a9bd","impliedFormat":1},{"version":"12f31c855d6740f7e9e334f93ae201c80044870233588b044e984cf383e9a94f","impliedFormat":1},{"version":"6b3e497a71110453570df44901ecc7dbdd5c5c62b008abe9b69dd8da27def2d5","impliedFormat":1},{"version":"bd89b633f43565e1f28b0add79691af677e16225bb8871f84c0056757f3ad7a0","impliedFormat":1},{"version":"84586dc2e5f93a90a1146cd283267572d6f511d860529e61d59edae63fed30bc","impliedFormat":1},{"version":"f590b53c526623edbd9fce0ca85c4d842c9c6bf44f3b8d7beda62c773ccf17f5","impliedFormat":1},{"version":"68747c8a7d6a02d44b626b1666f1af75dd6d50adef6996ecbc8a762488ed6550","impliedFormat":1},{"version":"96e01aa02ba1cd98b7570bb870537d3f49a68bd6407fd9239139985da202bcf7","impliedFormat":1},{"version":"e24c8e4ce93f2f740d5dd1ea575a85725b8e1dd320da5257356938beec2f5287","impliedFormat":1},{"version":"755f25e8fd9e37870e11091272f14dabb0cd9e3dd86f5df0e364eeb6419de87b","impliedFormat":1},{"version":"327754df1479b0c9c265b97b0aca99fbe1953e3d20497aa42ad6d418e514bd7e","impliedFormat":1},{"version":"3aaff6c0d520561d754395b0c4b7d706f06a98587b100f686734d20a643a4c56","impliedFormat":1},{"version":"0e8d39b8b864d097c5ecc6dcb09be4d6026d54d7a811b7bf7629b756de1c842c","impliedFormat":1},{"version":"a2ed41eaaf4327dabdcfae228cdb972e44b7ee768a13905026951a3d9f23daef","impliedFormat":1},{"version":"9fbf799e5eb45a1236439e09922d29f48da728c266a9db773f49047d43b73f1b","impliedFormat":1},{"version":"5751682bedac376a5779f4495e103aabcb1f363789226e0a754b201a7c3530c8","impliedFormat":1},{"version":"7cd9e903bf78a331847fff8d4d8c468894aadbbf2506a9bedc7c4f0a6a24c3a6","impliedFormat":1},{"version":"a501c4d0b90cde0f0721c1d8bccfdfb6843c650fae6435a185940776e72d82d8","impliedFormat":1},{"version":"8774d92fc085de678c5da7070b9cdbd39b939f629cf683a59218aa1d05db45d0","impliedFormat":1},{"version":"d9dd5e0f97d82848d11e11f87e71e9b9f475fd836f3e879b351cb4ac72bed905","impliedFormat":1},{"version":"d6a2e78ffd68d0a404d13cd60152f7ee4ec48bc1ccada92daab8e4492d502fd0","impliedFormat":1},{"version":"072e6a97e2a9291437f0541d5c06b5579e077d573d41f9cc9740d04972549633","impliedFormat":1},{"version":"d291627c803d32e31129575c8c3c5a83a23e38e69d8e5cfe3de0d2ce3f2c7fc8","impliedFormat":1},{"version":"d25e50fca109215ad1dc01b671caae85734594c677952c26da77facae17849af","impliedFormat":1},{"version":"98dea46d677c4222fa5b77c267335b2d336e393740f22768179fc0a0f9f95bc6","impliedFormat":1},{"version":"daec5d2d52be233262c80013e18d57be920152412de99ddb637700410ee7fa7d","impliedFormat":1},{"version":"e1e1837b07bbeb81a00d1b0b7edebf8f3e2b44ad148d5faff905ba17a0005813","impliedFormat":1},{"version":"e7e02f538956c85e11acbf3586c30048ba17d9457f23a4547cc6213ca80438c4","impliedFormat":1},{"version":"f5c47c1ab571300759282cd621f629a1c905742a67445e08e1fbf23f60183f2a","impliedFormat":1},{"version":"32d0da1473ddefee1c6fda291b0a80b90cc29b595c5482091e3e7ef8290e73aa","impliedFormat":1},{"version":"d025d6a28b3d69ddeb3cb0b9c3e7ed19ec8fb24452e18add0b495fdb5ddd18f1","impliedFormat":1},{"version":"1e778ec11fda32eb4a43f94247733639185f80212b6bb7e340838d4bb5c6249f","impliedFormat":1},{"version":"98a9416dba4de725fef1dd559a12f1fecf1ac784e6542141b590a611ce5084cf","impliedFormat":1},{"version":"20e1e198d28a4ce7f665091b7dea408351573c6599a8a3fef57bb3e345de4660","impliedFormat":1},{"version":"331a4c59ba270fca4e7d2bac87ba39135a117c460a12ec48dd919eb8a47ace50","impliedFormat":1},{"version":"0e56229981d691c2276d9f0112f536e103bba5e8192ccd5554845cd1f22a8c0c","impliedFormat":1},{"version":"c4afd4c403c5c08c2e0ee80f9a2d1653e4a55b5eb826db428ada069871c5b954","impliedFormat":1},{"version":"1bbb133267e10a208164b403e93aab3fbd78bc7d6c846a17804b95d6928b5077","impliedFormat":1},{"version":"ea5dfd206950d5a8eed566a321e42033f5b5a9df94c728e5c777c15fd009fac2","impliedFormat":1},{"version":"3464bfdffab42a9330124e1ee6aadd25433822602ee6a7b30102bf08ed7001fb","impliedFormat":1},{"version":"a7125fe108eb2f3687f74863ce642b05df19b2ccd2ac517a991957e3225c6496","impliedFormat":1},{"version":"41d618c1a7458dbaa9f29c5545d1df2923b8978836c757b41d85627982b01311","impliedFormat":1},{"version":"4bb6ea7f076386c7e82a21f763a931335150189147d191a70eb256f271cc0c8e","impliedFormat":1},{"version":"c7b19f40914ec59fe03cf4d6ebaf1b78a5d919e7284c22fcb57fee0ba547e084","impliedFormat":1},{"version":"0bb2c3e440231a71c28098da7857a79af8b7b462efdff01f6617b6a644aead8d","impliedFormat":1},{"version":"130e2259e30267f491043652773c9bc451fa8c7fb390f015dcfe7b3274b5b943","impliedFormat":1},{"version":"ae8b19ae045199e8177376fbc2d7b5d22dceccdcf965a4fd8b1591b7b1e6c954","impliedFormat":1},{"version":"0f4636ef291069225e2021144bda3c5370940ec70713ee0997f60b5084071823","impliedFormat":1},{"version":"f962fc4f05bde2eac9d70b613116e0e190d01511d62997d156b97d91eaa86ff4","impliedFormat":1},{"version":"6d80a7a75e84e9088cf23db88d829d7bf234c4e0dc4dbec02f78298c933b1882","impliedFormat":1},{"version":"543727847603aef88cf045219ff34f21392234e0cda33c6b4a87b296bacff9c6","impliedFormat":1},{"version":"8043dca35c02bf2e374c2c4e7d6be0429cd0b40ad80d51244adc061d68b54274","impliedFormat":1},{"version":"3c18cf90597200a6d15570e8ebacc02defbbb55077656628ad88e5e441b0b767","impliedFormat":1},{"version":"c369fec12e7e19e0db95d3bb4c5bc2b5b0abdf27cf6a69c07d40af580ba2062f","impliedFormat":1},{"version":"bd88ef18037d28b1f6b73ff2c9656cda9b85662b0a9e713a0531d28edd82ce1b","impliedFormat":1},{"version":"d1ae311b1aa20b835952069b1cf5c5e789140c45ab3a8eeca05781963ffc31f2","impliedFormat":1},{"version":"3a8628855f9dcdf076089ae6191a1797b41d4326aac3ea444e7b25a4e51457ef","impliedFormat":1},{"version":"0a613cd9a16af8a92d40007872548dcc1099e5a8063ceb6353821281c25b972e","impliedFormat":1},{"version":"454f21c515fd79ca2e8a7d024e384a9a680f2e94773c250adea98513a1e22519","impliedFormat":1},{"version":"fa37abd7294cb730fa278277b6aa22ed4c867308e778842113fe7b112c1054a3","impliedFormat":1},{"version":"f42496e94a212599cd12686e30a03c2ee81acb62e8b7dfbd3e84bf80abedda4f","impliedFormat":1},{"version":"6512a1722a7bae28f23066b426ab271134a23438c5dbb4030368dbbd085c220e","impliedFormat":1},{"version":"5a4944638591d30d04ce19dd91d92e083e620b0962f9c6a5dbc73fcfee155e17","impliedFormat":1},{"version":"83295161ed888ff8329c83d76ef4fcd0cd8d75010fde91623e65524017cae470","impliedFormat":1},{"version":"9e0219eefe4f1950bba1be69f32ce595175925332a654bf77d79b5c588acb099","impliedFormat":1},{"version":"e050e9297ced6e6b38841b93032503c6a5a0ba9bbfad6dd100803ba7ee86fb1f","impliedFormat":1},{"version":"2b4464731f95a1383395b4b6ab05750dd8003cd4bfc082328926524dc960071c","impliedFormat":1},{"version":"6c5db87af9fbb0b8ce270c6e700e5792ba4e75dc011932f5ebf8f88815abba3f","impliedFormat":1},{"version":"46609a58ccfa4ed8951d70c8ab20c6210aac7134db4f02f29eb8280601aa2ead","impliedFormat":1},{"version":"d221b97fda8881de90ecd5230e016f799ff3f581365e1ea80ec46bcf9804fca8","impliedFormat":1},{"version":"7fb8c3b540902629363eca66cfef31a0911e173a4b2fda3dcb0c8b38153e784c","impliedFormat":1},{"version":"70f1363b4768270a362bc0c1f3c2c6b4b1cd91ff6e62a861cfefb85f10bd2d90","impliedFormat":1},{"version":"d459a18f41d24c565e0e7bf8071058cdf4a9442a4ed8db1dd1aee59db9ff5cd4","impliedFormat":1},{"version":"624e6a7c29d308edd5de72cfc550bdee7625f2dff415c54d106b3be0b8651e68","impliedFormat":1},{"version":"25839b70a7407a9407a4d1a23fcb27762ef797eb3e94379383de748d52b4bb66","impliedFormat":1},{"version":"0adf7800005a992506b7e466c6591d100b9ad6d35b6d401e36d8307bb5c85015","impliedFormat":1},{"version":"6cc8242641c5e6befff23d1f62e400ee92437ad7bb89aafdb4924a6642564492","impliedFormat":1},{"version":"9d11489bc447facb412f41bec85117d3316e2af4d61eae43373609e890a55a6f","impliedFormat":1},{"version":"df82a8fb2e5cef3128830a08f6d00e5e7c3cfa25444faf10041011ad1ddc7623","impliedFormat":1},{"version":"0fff108215903bb791003f0ec4f522eb5b14986db32e11665ba09e73f407fa8c","impliedFormat":1},{"version":"98e1825ffe5adf884f52d751cde062b83b65fc2700c7098207686ca2f59741d2","impliedFormat":1},{"version":"6a3ecc2e6aaf46352e340596f82bfd01f52af258de902c9f98d332d646e5c9ad","impliedFormat":1},{"version":"77750e016cfd22e596572f957394adc24de3bb58e522cc55e289273442fc5002","impliedFormat":1},{"version":"98084a725f9b773ef2857a65fd4c7ba5d14694f9d73641a73d4647af79285b37","impliedFormat":1},{"version":"911f6b60872922ed17729a45fa3c1fd451e21b3ad8c3713a922beda14d5c7fa8","impliedFormat":1},{"version":"c3a92b5f905158df2f7600695b5af9b5c6254a0c7fa55fd6f191dc57cec97e83","impliedFormat":1},{"version":"a26901dc8a992d9283f94d258becf1500ee527a7941a6d7a5a64c586b6136733","impliedFormat":1},{"version":"2810b64ac19e63be91648169e04961f6add2d4e236a5730ec91d0cd8ee607155","impliedFormat":1},{"version":"09cfcb72ced8e606b5be59f4b87ed0af05fb1971726f21cb88c8c1bbc1cd2248","impliedFormat":1},{"version":"fe058e3ac05f9718ae89fbbae68991631c6540cb86036efba7910eab4557526e","impliedFormat":1},{"version":"6c8117420cc7babd64276da689df960d1949274970e4c0d39966404eaa1e3dd1","impliedFormat":1},{"version":"24184a91f0780558b3f1e8dab0c65ab320acd993e3f96872ab1951ab2020d1aa","impliedFormat":1},{"version":"6f5725b935925bf077168f60943fa29985839b7fa3669fbd5b078c347cd01e05","impliedFormat":1},{"version":"8bc25096cba884c56dc7a170830defd7dbc4eb75ba1e83d1e285216a50870f9a","impliedFormat":1},{"version":"aeca1b84be03d3326ca244d5a45a541004d2ecc543dbbe5e14727d03dff7ff22","impliedFormat":1},{"version":"fa8e0b4784fd50a6d0cfd6f7bbbc2e19d6aaa1cf58f8197c16d5e86e47e44aec","impliedFormat":1},{"version":"2e8e081aaf314b1c50271aa63a84934d91dd664ede3662d65572831b61976aae","impliedFormat":1},{"version":"abf7b81b492331d5c2c126c8d40eb3c8656c4214eb611feefddf12d3f259336d","impliedFormat":1},{"version":"8c8e7e234af3c537f53d8080666c39bc482066e043819d97aee7eccf6ac9d7ab","impliedFormat":1},{"version":"cba3353f5a0c93c5f29d3592f892251c9a367390b86cbfa44dcf92b54f6b1273","impliedFormat":1},{"version":"7b52572cbd825c9ee1cda96d9f2aba22c433ba93708b798dcf688cd79880788e","impliedFormat":1},{"version":"5e33a99c3759bb4ada6eac2103dbf45f073de71d7fdfde76569d81e324e6ec2c","impliedFormat":1},{"version":"75193a248aa1f5916bed2f77cf1aba44f598800089f701a24c8f82dd0fbc6b8b","impliedFormat":1},{"version":"956030ad86fb7367c9372d16f7802e72d67677620e4391f4ddd343629afd13f1","impliedFormat":1},{"version":"acfb2b43dfe5a70cf679bdbe793765d0dc21a6d2ad3f755fb89ecacc18f04b61","impliedFormat":1},{"version":"0a9a5cd5e4510d9f1cb8cdd897a98526b3a387e814b992fdd44eb9ffc6096103","impliedFormat":1},{"version":"944c2fa1a0bd0ec1b6ca003d7fdd4015641d388a124a8a42c9e50204f0b5322e","impliedFormat":1},{"version":"50c88ab8c34ab68c084a9d57e16e7d6df1b2f4b034b2d807b0ac63ffb5452aab","impliedFormat":1},{"version":"acac703a2fe782a9075fa64161d83b93e2ed84971ce5778b54367cae04861b4b","impliedFormat":1},{"version":"1e37e13f7eed10a9113766a659c71c8524131f906f7a255dad2a5bbbf523a3e8","impliedFormat":1},{"version":"acd1a028e3e324ce781004b3d7caf47642583674f37806bc324e712e1a73079d","impliedFormat":1},{"version":"6f8c2f7d30b0826e4abb52cab6ee47b38da458b2f4df1d9847aea7dba09d91d2","impliedFormat":1},{"version":"81e485f9e98308bccf4ac86f1d82f321ceda2457d412fec97000f817b9d643bf","impliedFormat":1},{"version":"6d4035817abe611f96e16ab5c02d08769e57d8378a21bedc639ad01c0dc18f96","impliedFormat":1},{"version":"28f011d350478330e3c38dc8fbd6a803667c93aab3b7f48ee1821b77d1fe295f","impliedFormat":1},{"version":"58f99b255362976cf050f38c16c1d5c2692f16df9c89d32fba375b2d6e245c9f","impliedFormat":1},{"version":"ac21b8dab215ffdd94a264d31c1a103f1367f64572314683f07c668b49a654a5","impliedFormat":1},{"version":"229add56e247c1e8182d073d534d3f907caea366c89c346d8340c247a04cbc8c","impliedFormat":1},{"version":"b6e116973657b5cf2cb3f51332793b26fe31f2153c5eb48caab0d4a5af01542a","impliedFormat":1},{"version":"968ff63aa5d7b93804ed371538653ad8e1f7a8c9988bb1aa9efd65b620aad64d","impliedFormat":1},{"version":"9f2ab92b089dd1b38818c1af589dca006eaab8abea5a4309b57f0de09cb5ae5e","impliedFormat":1},{"version":"6875771fb6530522c5316033bfcb39881bdaaf7266b145792f322d895fb26ea1","impliedFormat":1},{"version":"a8e3fe551a045dce96e3c5edb2bc6f142692ec771758b91e28f1a7107e9c742d","impliedFormat":1},{"version":"d739cf4900378ed3f81009897b135cd8bf836d2c61354a0afc624788c820b0c5","impliedFormat":1},{"version":"09e15e0e59d1be87d2c68a4542c6ca9a6debd152158a6f880454e0ab9be37ad9","impliedFormat":1},{"version":"3710a4a6660a9277bbe498a19aa9999997802dc0dc53dd242087fc8ce4832198","impliedFormat":1},{"version":"fcfa4fd199884206ef931eb960e66d35a21570dd023630504a48c68421a35a6f","impliedFormat":1},{"version":"3c021642295e99ab82b34dfccf1f9107105e765941ee149a58da1e75d8b34fc4","impliedFormat":1},{"version":"eac743b5660e8e7a5b5c3b1cbde9d58d1d938f31c4ce301186d4904ed16d129b","impliedFormat":1},{"version":"35f03a5828927f555db3778528178499447b7ca406f4ec0c94981c715284a637","impliedFormat":1},{"version":"4bef1a896cb320e389ec8ef025097a41159164ff26a14280d59775af2257f9f8","impliedFormat":1},{"version":"dc36e988cb993278abb0cd3dd2c32802d8e8065ee6e970fa69494aa6600dcf5a","impliedFormat":1},{"version":"2a35ef77ab70c650c39416ce43c7c6e1f9cabdfef48314ac1b809cfd6227ce66","impliedFormat":1},{"version":"d97f7d66cff15354733fb262de4a7f2ee46adec1e46f20ee717ec710a9567aeb","impliedFormat":1},{"version":"f8057bf8e38926f5f57ea9a7eba012cd59b33817eb5c548fe2ba784d55adc0c7","impliedFormat":1},{"version":"0531e251316a6e6d629960dbff082680a1dab1953f6b1092c47a3f9941db12d6","impliedFormat":1},{"version":"c3bf7657a61131bd57391555d79d54e2a4dfb8b4df5f3255c3fbf352cbc68801","impliedFormat":1},{"version":"1941d9c193562b505c762f4e2474a170947f4d38ab7cb01cc6cb0cbe19648d2c","impliedFormat":1},{"version":"b6a68e51a0e96f3e28520a55806b70f3d9cac59fe0e1d3d56d9eab26fa07d368","impliedFormat":1},{"version":"ee4a57ab6f2a9e0f7db13574e1ca490c8564076c7e1f1023ef6b033510036005","impliedFormat":1},{"version":"6f948794453feba1a5701259ba0743610aec499fb5d821a35a0d658bc02ba79e","impliedFormat":1},{"version":"3100f28c18a0a974faa3235684d7719d47a88132994ddb00490771217bce03a3","impliedFormat":1},{"version":"896531d3473483a5f8125cfb1939eaca0e68889594423268086db6d111ee522e","impliedFormat":1},{"version":"d8a0e4eb3f52e820e62a823e62815a9727b613ce7fbea995e999af0d8fc5386f","impliedFormat":1},{"version":"75bbd778624ac10799f7b0e5c529bb517ed4b323ec1aa63e7ffc5b9be348aeaa","impliedFormat":1},{"version":"d6c627c11a2d9d4a9911d028cff4c244f5f6cd102adcb575cd6cf92d55582d07","impliedFormat":1},{"version":"5511449580cba83543fcdb22bd6927e7bdb57e3331413921d9846bc6eba5ab2f","impliedFormat":1},{"version":"7c7c0b5bfc91d722fec5c59d43ad9be93a40ffc95d79b3384ac78eed047f9ed6","impliedFormat":1},{"version":"05176fadcabfff757208c5f736ee1689a73345ea9895566e93740738e86e5643","impliedFormat":1},{"version":"3b02d9156887116ffbd6fd7124d9bddfef1b5228adc7028ff0bba5a174d7fcc6","impliedFormat":1},{"version":"07581991b81e0d49d323bd35f17d2d0d00736fca125970998e8ef876dbaf8b13","impliedFormat":1},{"version":"f2b525f05e7ad7fa4f8fe746df2b9d4f41cda24edaa77be17d54f1c10fb51a05","impliedFormat":1},{"version":"5d2017f209bf5c177ffcb026c1e452dff03dd73db56000f65c2c5ea3dec89ec0","impliedFormat":1},{"version":"18977816a92eaca224b1bde34424d2478165d41183916a17c0f151b3666c78a6","impliedFormat":1},{"version":"27fc88c6a6d0ba0ae47f3ec03c9776a8864d13718c2d28d1fec4a2eef81a2c9f","impliedFormat":1},{"version":"18c50657b75421d43fcd0bebf144599e077757e197a16a77fc77c82c56c7fa53","impliedFormat":1},{"version":"ce6503a1afca12129cd690f7394e8b77515e3855637fa4ed3c08e260000bc170","impliedFormat":1},{"version":"253f2f34330657b3b936cd44c74ed1ef99e1c72819cda33dcb68edba670bf745","impliedFormat":1},{"version":"d6f068d7a96ccb435848dd65d8aae4a0cefed10984b270906f1543f7926f7906","impliedFormat":1},{"version":"445aaa283d55e4c514ffd0092dbde240881d006b328f109b3d560dbd4e188f46","impliedFormat":1},{"version":"00e725bfd68aa39a6adb7da022b285e25248ec45c6f5bea067fed2332e9649b3","impliedFormat":1},{"version":"800711e010bf97883d17ad5f9ddf273cbd144154ba049b13be5782ee12631d84","impliedFormat":1},{"version":"197f54fbdb04c26933b16c7136580a64ad04fc06070a45912dee4f6b8fcde925","impliedFormat":1},{"version":"d49017483f66844e8783e9233e0c3f09fec91aa5320f2e748f11d3b3eb9f7d5e","impliedFormat":1},{"version":"23c6c92831e898a6f8b85625b55b9fef92d6881e572de418202f3fc1bccf699d","impliedFormat":1},{"version":"ecec1f45c9cfbc298e3289f86b1f7777fb98d0d30ef0faf9cffd5531f2ebe82a","impliedFormat":1},{"version":"7e15689b7d761fc48392b4567c1686140fb0f5af010c37d8cc73d64a9b342efc","impliedFormat":1},{"version":"7b3bd78b337f25ee3e5fef56bf9128c35a9c373132dc32973a2f3562c05f2c18","impliedFormat":1},{"version":"8017d763bebde1b9b1809b5db43f3bdcb96c6e143acd5508fad20b9241bfe52b","impliedFormat":1},{"version":"8c57412451bb8b0d63059493bd6172b0093b1dc4ab67135800bab686211668e2","impliedFormat":1},{"version":"ec9da0cb04d7c3bb80aeeef3ca4e0e41848cd75d2641b2aebc1cd743a0a92de1","impliedFormat":1},{"version":"55afc4e97b67990ba7cdf4e3411e58b7a71744ff1ac2c4ad1d48242e134f3dfa","impliedFormat":1},{"version":"89740506440be9310e5f28fe1b9934b6be996bd5ace4161ede38a88c639716ad","impliedFormat":1},{"version":"010d565a326fcf7b7dea5721776f7908adec311179cd473e43e93430d3fb52f6","impliedFormat":1},{"version":"67a040f0a1160345ecacacf65694ff1f2b1bb1b8db1543bb89641b4bce078c74","impliedFormat":1},{"version":"be96211f16e21fbac4daa790a0debaeb7d2f33bb66abbce99556041f370402e2","impliedFormat":1},{"version":"b2d6bceecca68f239a650eb576994d1a6df7f8772cdf395210d54d8ba32405d1","impliedFormat":1},{"version":"327107debca41a137b7827a1bff2a7650ee82273ae0c2414956c72463c2c4692","impliedFormat":1},{"version":"e63a99dbdfb1509c282d4871f37230f0220cbb62f6c5b123c7eb29e08925e543","impliedFormat":1},{"version":"282d7d906e2e6a7d1851a4df9bca2313303a60badbc2737edf77c143526b1c88","impliedFormat":1},{"version":"7a9a9af10e90eea2b7ad7c484145e4d7f77c9f02b937c29390c3821886573ac9","impliedFormat":1},{"version":"74792d4ca5e78ab1de2a86d75e81149776cd3ede006e22433232179e1d9d1740","impliedFormat":1},{"version":"2c828772900391675f9010a154eae8c6272d50632474bb62f966b2e9905fca2a","impliedFormat":1},{"version":"206a972d542353e0e574b80ba816be9133791e42f411ca4ccab6bec67ecb1615","impliedFormat":1},{"version":"dfdbc2fa0d615f3c8157094eed58d365f3ee895f0a62d88695effaded9509b58","impliedFormat":1},{"version":"4db4dfd8dd13152d2f0344d3b4ee3676772eb931aa0e93693e5681d1c7e7568a","impliedFormat":1},{"version":"726f3a07eaa8d4ad213f1e35169129bcf300a9f57087882812042fedfb4a1103","impliedFormat":1},{"version":"1d09c5eedc322d202d08f8debb077cee094299482d4f31ed45687b7ff39f0537","impliedFormat":1},{"version":"0ef19fe230623672c6d256236bc6e76623050b292f2b305987de90f06828fff4","impliedFormat":1},{"version":"40c1a51dc07eabd3e30c7a0869fe042a06cb6e397abadea4d981034160533554","impliedFormat":1},{"version":"f6144da2ecbde205418b9306abaa7454f2c963a30fc1a402ee037fe67edb5a85","impliedFormat":1},{"version":"1e371cf5281c9defa39cc57a2bed1dda7bf53051539577eaaaf56d258704403e","impliedFormat":1},{"version":"b7ac271ef8c556941eabe8e72c44f5024e17d910e47ba5babb604f2ad3d9914a","impliedFormat":1},{"version":"254759e0f50858e5be171805b4a673bcc43f2a15f649f436462a7d87ddec1e93","impliedFormat":1},{"version":"ae343c5c09bc1a4a8ccc1c1513797c167e0767993d2d82597bc64d2c42b52685","impliedFormat":1},{"version":"e74200516a897bd98d1609f27be582033cf12b7d4fb01dfcf48092b8ccbfcdc9","impliedFormat":1},{"version":"c00a3889431a387cd5213e40230aa093ac00ecaa3d163a85bc592139ac6631ae","impliedFormat":1},{"version":"7ecab76043bb20076cb5212aa8da948c8771d30ced270ae8ea001f34397b3209","impliedFormat":1},{"version":"1714ce8458fd5b757fcf0a01eb07cc0aa297cf88edd7ef74eb0922b8a80e3b0f","impliedFormat":1},{"version":"a4c896217bf522dbacae0080d82e52dc47718cb7267cdf6c46c4a2febd0e9d2f","impliedFormat":1},{"version":"b750bf8cb0d80e742d74deb78d6c2723e28075665fdbab98f7fbf6984894d950","impliedFormat":1},{"version":"cd22215a4f429603c0ca0989bd2ef90c3214f22d1ed40b93753c30e77e34c23d","impliedFormat":1},{"version":"32cf3787c1c2e11daf3b263983d3d4a286ca876438776e76aab1a7f69a09ffd5","impliedFormat":1},{"version":"3f8b73c205dcc937301e19a8524096481b94b08b3f539f228303ecfe3f720f8a","impliedFormat":1},{"version":"ec172d151652710ccc7561454b21c9891d346b0d42cf3fdb532c9e4c9c18b42b","impliedFormat":1},{"version":"7ed827f20555786ebb85de60f124f7ec5d310e62e8caf09c7fa6fac788ea24dd","impliedFormat":1},{"version":"4f0c321ae3f9670d8752be0d6d8fef08d7f6fcc9048cb65e5d03c0e934b73887","impliedFormat":1},{"version":"ba80c7f32729824e8ec521ecd544355012990ca20c16ddcf968720a7b1c817f1","impliedFormat":1},{"version":"5e0d1da019d104d5340908bd5a3c47704303818d27e07b94abba10170d3f9b83","impliedFormat":1},{"version":"640dfe5cfcb32afd002a422aeb3fd663be2d4f0db7ad2bb2f4fd492a855e49ab","impliedFormat":1},{"version":"1a1bfccc6354ef6e9d73011cc08b734311e0c6cbeb9fe19f6c25e4ee47ce0bf4","impliedFormat":1},{"version":"12c40972340ddbf2a8482e5f7320d5e6aa4230a462be754b7574201d2dbda89f","impliedFormat":1},{"version":"3970ea9e13ee6f473b5912ebde92e3de8857cafa609e9969c3bbfe606907e465","impliedFormat":1},{"version":"a67e70d495ed11f391211a8fbb04c22ea96d97a0646faced3a843aff89b34b7d","impliedFormat":1},{"version":"a9611f7ce5024a263fe3c6d13d6afd7f4d40ac5e8ccae29659f2266b035fea4e","impliedFormat":1},{"version":"69c0910cd2adbac7ef977b3174152f048e22730b9212daf1c04691e27797cbec","impliedFormat":1},{"version":"4cd263e37563aae86103d7f05bf7a7b822c196a5df199de5493321b3956b1d70","impliedFormat":1},{"version":"81a9830fd86e978c54212175d4e98261d483b18b0c20a0d8b7969bca7854abe5","impliedFormat":1},{"version":"e511f9b393c367c510423b8c32cea29b85041cafd62db728820314101d26b63f","impliedFormat":1},{"version":"91cf055ff6d1157cad637c0854905c175ae16e085d90896fc4fdc8579c01f0c5","impliedFormat":1},{"version":"5bd284409327bd032d3a03e4af87b80c140e426338c7be7aa5094da3d0eeee45","impliedFormat":1},{"version":"e73a2f7ff4c22c9f8e8a2c9f2167411a43abf7c2b0df2040fcbef397432d6849","impliedFormat":1},{"version":"9ea0fed4f40164e059b356cfa79eca1f4989262247398dba27d0e4d5301da816","impliedFormat":1},{"version":"509bd89f23a7956d094bcc4c600cc12564ec32e609b6acfe498b6c67d1ccfbfc","impliedFormat":1},{"version":"d63707bd1c8e4d6e988a6f8b81724b1188a23195016f491d31fb6098b600c985","impliedFormat":1},{"version":"47110029aa9cc198e2dd55b8983df71956785bf7aae3d40f1e17c0a41e2f40ba","impliedFormat":1},{"version":"e41408cc29f9283a9cc2479b2ed04d378c1dcc07a132e1a0db61ae5e6fbed624","impliedFormat":1},{"version":"7edfde4df10c002ecdcf9600c1e731c83ce9b88a3895fda32f3cacfe1448a545","impliedFormat":1},{"version":"26f845eb94f0cbff4fb342010e1fc24064a79f3cb244cfbdcb901c72313eaea5","impliedFormat":1},{"version":"c08abe4eb7d27ceb3bdfde948ffa7a7831b9b716bf03618ddba0db0199e49fed","impliedFormat":1},{"version":"0d0437bac216bead268ff9b4a2c66d10efccafdc41ba582b2f35f38f848ed8c2","impliedFormat":1},{"version":"43b31cc0fd38809f0c3bc3c2d2cc77b391acd9085d382c3c91e80e1b4c34caaf","impliedFormat":1},{"version":"da9985233839dc77b5a16b04a3c30afc1db42e3e991a1f23bd42a43deae80e06","impliedFormat":1},{"version":"1d7dfdb7412f7705b88a306775ec0f433b4ca2032484c539af05eb1019855b60","impliedFormat":1},{"version":"b7efab411587fe6eec7d0debbf96fe3ea9a2878dd01a928f5590847bec9ec884","impliedFormat":1},{"version":"fe3231da9e8e77e23d81974eeba44d4de894e4f7631244c12beb30ccb9b7780f","impliedFormat":1},{"version":"d5f05696f63397aa52e7d5f736cfbcd5117fbc1f97e66b60df0ac6926f786024","impliedFormat":1},{"version":"8b1c6336949a671ab4a6f11f9cab39ea5a1fd2ce229490883c43e99c1ae1b9da","impliedFormat":1},{"version":"42ebe555ac2d83bc60369750812eba8e048c83bd650b250780f472329f252c23","impliedFormat":1},{"version":"4d7aa8c8a4ab7c4c98c2786272d4f30111618d73f32a06360b66aa8c03916de9","impliedFormat":1},{"version":"12cc4340b2d5a15599ba3a4ea32aed2f952f0517f61f1c314cdd67a85980b08a","impliedFormat":1},{"version":"3a932644a88d6ae1957c97f3b10c5d1560801d40cc8c96d6cb580c2d90958805","impliedFormat":1},{"version":"f6702e5d7b8933f4c638b391e0c654e4dded8fe60ad98d2fd2d01ba0640c8cdf","impliedFormat":1},{"version":"e43818f6c3bfa9b25be2285a99d55c73b0299a4f964c46a6baff49a4861c77db","impliedFormat":1},{"version":"d9e3b7368160756be2b7be06d2106cc4f88c788b3b264792e7ccf0b82afaf8a1","impliedFormat":1},{"version":"601d218e0d8293f49e6a4e80f8a21e6735d234b1b8b8e302f8273968b82b66f1","impliedFormat":1},{"version":"47e2f1f2056fc79183944dc67435934c076221e0dce4cdbb5d5351c507c8358f","impliedFormat":1},{"version":"0caa8b7fa869d238bfe1ad77608606828d3ed36824f1c6d749fb01f4235c878d","impliedFormat":1},{"version":"a4989e72ed4d93d727577790eeeb8f8e10f555779c10dc38e7cdd4577ec233ca","impliedFormat":1},{"version":"f26c3f9dafe8315df6a5e70b04fdced7963854ee479a73cf41a6f7a7dd7caf4f","impliedFormat":1},{"version":"2d842f7ed1de57ebdfdfdb8a8805ac6301e127f45124dcbcd9115a12c3fc251c","impliedFormat":1},{"version":"0421e5aaae059f79a8579b19c03a6a5ace53545c03215a5e6c35b93ba7c6964b","impliedFormat":1},{"version":"9d23012eb12780a94b65be1e3d8cb9afc3efc8c06d17012307d462117219de12","impliedFormat":1},{"version":"e066a06edf364d52f4257380e6966a02442c01ca2b3e222f496355d35ef7f0b6","impliedFormat":1},{"version":"70002710a6f982715c40fd1da01eca0bc9298ba07f3bc37347995645f53c2dea","impliedFormat":1},{"version":"29c9532cc4863787c5827dcffd566f97b0798ecc33558ddc5167d52d0e6168b9","impliedFormat":1},{"version":"de2127b95990f154f41afb1f80a9f459ae7746354a9437a7eda1e55e4420e529","impliedFormat":1},{"version":"aa2c16e35d7af2b6835509ce8e778f5046c45b91b2d37f5737578e0788d1a7e1","impliedFormat":1},{"version":"93aa2e0816593d2bc0cf04c1c6b14371d2fcada6e561c14bf56d3282d35daaa6","impliedFormat":1},{"version":"fdee57eacfb577d17fe209f809f7affdf510c1a64aba8ed3cedb4d74e899cf84","impliedFormat":1},{"version":"db60e032111a14f8c2b6fe319ba70e199d0cb75a0a5adb68c51754cad0941f59","impliedFormat":1},{"version":"03d492c452bdb5d1f9a9efb0e3b375ac17fec045947da6bed9745853b4ee24bf","impliedFormat":1},{"version":"76613c2b87fe472db96b9a4381cd105444b2a15712dabee2703744f4ea6e2fdb","impliedFormat":1},{"version":"641954759d5b9bb6ddb22115d022e224a3f62bad81077d6fe8d85bdf4ebe3bb2","impliedFormat":1},{"version":"dfd535a8d6b871735d13ee27e090b80eb67185cf52e376076574cf0dbc508dd0","impliedFormat":1},{"version":"b7c031179aea37a4b665ab42bc6832392cfc086651e1f3cbbbe17a1229527ec4","impliedFormat":1},{"version":"2a14128e218dc0fce2ad3700c3e45b79eee6de3919a1af2005205665f30c50f3","impliedFormat":1},{"version":"7c2fdfff73c7b0e57b16b5707ae5b237c8a71473f14961403564741bb2d9ad1b","impliedFormat":1},{"version":"7f262a8e55403fdb506262a921fc15d7e31b6b66295fbb4dad302f6fdf8b21fc","impliedFormat":1},{"version":"75faf23b173bcb248d922a0e7d19b7855afb7f5e386028e87a75f525f22a0bd2","impliedFormat":1},{"version":"05bc146f044fee663255512523593acab4a310fb3700199598dcdf84d9818432","impliedFormat":1},{"version":"fb39949c6605d05313099ad88baaf92f2824eb36d20b80b0bb3fef70b5cf83eb","impliedFormat":1},{"version":"8ba546d0184f4a7cfa7bedb4f0c7cd30b3d8ac67f9fb960dd26fdb9ffc63b713","impliedFormat":1},{"version":"1261f11b2ebd54f4dc6afc809457da931b4c9618c99b488c041c3fffc5f3788b","impliedFormat":1},{"version":"6eb3cf6a903570fd4d8f670cdff675bfb67e8828e7b579b71208c0467eeaaa3b","impliedFormat":1},{"version":"6181651b3d922f2009a00282ec2d6fc0931176a944b894b79f8e18cf4b2b7f74","impliedFormat":1},{"version":"df4c48b5a767ca6d06f0b71b84db179851243122d8b15a92e1b8ddcac7e31547","impliedFormat":1},{"version":"0d2afa97d7b566556abadc03816c3568c5b374a66e72e7e6631bf4e3da6a631a","impliedFormat":1},{"version":"e166c42a1b73ad0a670c7f118a12d89f89a8b7b7120b4a3814a06343b0051ee0","impliedFormat":1},{"version":"eb896f64d252e42a5566ac88ba8262fdeeebe3f1903f38acbed1e3090bffb3fe","impliedFormat":1},{"version":"d0e4b317ecdf6c4f2c0caa0c95f99768cad523ee9e915df43d656fcbb6f00e18","impliedFormat":1},{"version":"a58cb0a782ebf1fb98c33f0c82fd5bfc44663566d47b91de1e242faf18853e30","impliedFormat":1},{"version":"4893fd721b065c846b558036d7110d64708a8337677886a664da64f80d75033e","impliedFormat":1},{"version":"189c79c8717c3a2cb0562feef4597430dce71ab1b123107413b7b92cbdfa6583","impliedFormat":1},{"version":"149fa2725757abef64f95bfe357fa53dcb173502afdc8ee0067ff0b9344ec310","impliedFormat":1},{"version":"0fce30e9ea633141f934dee5bdeba6b955dd4383ebb34553c214280ae6c595f0","impliedFormat":1},{"version":"e42ed423f29f47e2c44a574ca7de673c853231f85f4c3590ee6970db259b75bf","impliedFormat":1},{"version":"5bde7261dd941588be86b702b9dc72786561299cf7271aef232504bd8a22f504","impliedFormat":1},{"version":"926cb5e62425abba24f17d3813e59966bee892e434f84d51fa4ac3c2d2f02ca3","impliedFormat":1},{"version":"47597ce6305dcddc401ba92e383cd8e751ec078fc42546f305326e9f76b4a4ec","impliedFormat":1},{"version":"b1de63b1a81c18999c5331e9a14bb999caba0905b7815619dd1fb1fa690813a1","impliedFormat":1},{"version":"c39749c50dca48cb564a35f413d170089152380233e39396105eba049c1554ec","impliedFormat":1},{"version":"e4128e408464f38961eb93e466b10f0b70a5347bed31a306567de8a9d2cfa2e2","impliedFormat":1},{"version":"2d6abcf5bafa6dcba05d93f3a5addb1fbe1fd97accf0fa31d68cb0efcdb43c09","impliedFormat":1},{"version":"728f996f14dc3935a2ed4c0a419a84163f85c52473fc930b2bc7d29c0c67a309","impliedFormat":1},{"version":"4ec8b0efbfb1789df78f2d1a83701eb6ea2bb28902be8dd48f2881185c056951","impliedFormat":1},{"version":"692ab2223b4e73eb7366d5eddbe53fa33c95c3824db0bd9127ce00f4220f4d2b","impliedFormat":1},"2c347f3123d7bfcbef0ef65ee28afdfbea669a34d0599e3a957c2f7b0b2e2ea1","b454c786b93610e4c1f846e6ec79151383c92a8ba811474e43ccb4b27fb6def2","3aa0191a3fef91838c231928cb85718ddd5cb835e744ff6409fa2041853b5f59","27e94fcd5716ea90316f94c16d7adf20e84ef834f1f2299a06707c3b470d35c7","cf9c748355bd3a2e3fda3af11516ff1514b0d6381b23787de0a3c657a9781020","a05e78cdc4cb75d13705456fa8f9487d6d2971d57fe0b3099f5b2b8635628708","718449c8119775878941cf45768d55238d3da7c44b1d1cc8b5fd7a7c6ca87f4a","ae00d6233f6b444350a758adc33a2bdc7e4114cf85673507f4b0ec0d011bf28f","045faf11c365dbc6efab1eff851db2cf8611e3b4d3d857e3ae20e2d7b073fee4","a3306a655467fd78f94061efea6a4849d73e2ce70c16a7aa2e86edcac8003d67","eb58fe82b94e9d939bf7f9008ec2bd60685abb453c84766ee6b383bc0ea3ee04","865299278243076bc46d6fab22ad7102dadbaf37822f9b8e3e9efb6731551686","1bce8e979bbbfbbafc15255ceeecd3260345ab4d628f6c7d1232ac66576321c0","1fd6adc58258543eb8b1d73733f506d52ea718d3b07052559d1a681e6b59b043",{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"9984ee56114b71935ce5877a2eedba93a8f1c2eabc2cabbf88bfec7c955d4a75","impliedFormat":99},{"version":"e720c8a37b87f5713093ed04015dbc647996545ffc0fdf07885f444af738dcff","impliedFormat":99},{"version":"f73b596cb4b4860fd0a3ea8cab67a42ad344d95a392ca986ca4588f59ea8c2cf","impliedFormat":99},"ad60a27f86232effccda771b5fe6852604ab7fa36637dac3da122be6be7107b7","836dc9b821395e33a0635201a8babad409e4cdf5410f6b91052fd7068481a567","4ef9ca3b2a2bf2f8b21343632ba0146fb9fa05b7ed0ceeea8df8b3bfe4e36131","9e004aab4cd07f39dcb06c24812bf54b4eadea987824d064f194121bb2181750","bb8161c1a15c2a9abd02cd18522ef0f53b4fdcd2a570ef75dd4fc4d556c86a27","7121f8a3d7143ca81e758e5f4924bb60730a03268151ddc0688f144b03d427d2","4b464ebe4030df055365a7b373960c31ad3193a0ca6035dbd47a4524dd3b30e1","33bde33d22193adce818d990639a9648ba80edf3c421f07a5969c531026d7ec2","4237415a94b53051094d964f586967c87a8cb1ab3eb0032c831c2951d4d09edb","fa7aa9c16a019d592fdc0fb49dbd819e070ce7188c86075d2f0bbcd0933e66c8","543e0c4b4aaaf8daf7cff0e2b10057d42f3a1776c16a43553338ad1fc707e1ed","872f02345461bb5215bbefd538532bbf88503ac14d127d957bbefb544fa716ed","789891e8b8386136b7290fe7eba4de8f1f75d0e96b52b4d268b67e5f0c406096","e6e6ec0b2210f5491401581cf12db8c0c2454110f6e582e9a5949215bc895c1a","cb97ad5e7e8900ccde8f4622e4dc09c51c8c4d411c1b963320efa8f3bc111e94","471c11ae126af540479b5f9ca4944304fe529c949d44a9c14649bf2b5aa5c67f","ac572c40e3f87e53112b34060575b5450efbdc11fcb6f077a5e4d1979a10c994","97baaec03502555b8e929aca9be1b28995a0010709c28d4f7922ba51ccd1b397","b2ef51f383a2363e3d66d715c0f9bb84249becf53629f26486d418c8cb6b5aa3","79c662455dda7276e2ade17948973bd374e733279c0db40a19522b9a3f9b7c3f",{"version":"6392353adcff7db02a3f5dcacb5637b791dbbcb76125aac3075da2519af9785a","impliedFormat":99},{"version":"1f3952b74b8c766a2e602a0ba2db19d3d872d00bab4e01746c6b7229c585086c","impliedFormat":99},"8df31065cfb339718aaad75291fa8c1cf6957e08178947f8ddbb81bb08ff5480","4181fe0f4efd449a39014ef97fd87ded8c44e1dde60c1da5a182910e74900ba2","96beaeea47007a8d7f575b648ff2df60e48ebb865bf83539371067692d798c4a","b0d4a0de9bdd186cf2a14f78058ef54f62c2e4757f3a78cf2b490c0db4d6e80a","620ba450e15d2b364888dc6c96b3a1d8859716c544d76a17476c994f9f0fee25","58e83811bbdc661eab637ad96abb4320043cc7b9cfa99b9ecc638face30e5534","58dd7d6545588d7ff9b47101fe2d0d1280069c2254275caf90c5db95e02c95c2","8a097dff56f7a9df9f0d099e472a2bbfc0458a216339f4518e7e6188ce29bcbc","d1dc71213d324f0e882aba598b72e386c7770ebb71ae1435cdaa2bcdda362cc1",{"version":"01a1dacde70dd22ceb029dc47a75ddd4b455647b9b724b1f3e2c9040ab85a4d4","signature":"8039805d93366e08e32ed9a6815636377a1cfd6b6d6dbf2d46e8d766c326884c"},"eb5bd03afd30cee73f8ac1ea025169963b86ec8d37853e8f7ae16fd06b98fdc4","1112723954173b83f679fdf3d528dde3d70edabb8232602f3a0892aac032a78b","60602c57f5d767045ffe824c29dc24c644dcfb7905d6e0f252bb06194d9ee19e",{"version":"c9c42d5948aa033c444cb6a3c188bcd925997bcc2bd8e97928af480ee356417f","impliedFormat":1},{"version":"f4bb2d3708ccd853dac13f97ede135d721bf5c2586f73ab8f1170f439e44b5b4","impliedFormat":1},{"version":"fd5649816766f52b1f86aa290fd07802d26cbb3b66df8ed788a0381494ebd5ed","impliedFormat":1},{"version":"269a13226bf6847c953f01ada5aefe59a3963a3a74f98c866ccbf08679d16b86","impliedFormat":1},{"version":"b769494ac41040c4c26eb6b268d519db4cc8853523d9d6863bee472a08f77f80","impliedFormat":1},{"version":"2fe42f88e2d318ede2a2f84283e36fdb9bd1448cd36b4a66f4ead846c48c1a33","impliedFormat":1},{"version":"cb403dfd16fdbdfd38aa13527bcbb7d15445374bc1c947cfcc3a9e6b514418ab","impliedFormat":1},{"version":"60810cf2adc328fa95c85a0ce2fd10842b8985c97a2832802656166950f8d164","impliedFormat":1},{"version":"de54c75cad3c584e18a8392a9a7e0668b735cd6b81a3f8433e18b5507fd68049","impliedFormat":1},{"version":"c477e5c4e8a805010af88a67996440ba61f826b1ced55e05423ad1b026338582","impliedFormat":1},{"version":"6b419ab45dc8cb943a1da4259a65f203b4bd1d4b67ac4522e43b40d2e424bdd6","impliedFormat":1},{"version":"a364ff73bf9b7b301c73730130aed0b3ca51454a4690922fc4ce0975b6e20a33","impliedFormat":1},{"version":"ef113fa4d5404c269863879ff8c9790aa238e577477d53c781cdae1e4552a0cf","impliedFormat":1},{"version":"5bfa561404d8a4b72b3ab8f2a9e218ab3ebb92a552811c88c878465751b72005","impliedFormat":1},{"version":"45a384db52cf8656860fc79ca496377b60ae93c0966ea65c7b1021d1d196d552","impliedFormat":1},{"version":"b2db0d237108fa98b859197d9fb1e9204915971239edbf63ed418b210e318fb8","impliedFormat":1},{"version":"93470daf956b2faa5f470b910d18b0876cfa3d1f5d7184e9aeafd8de86a30229","impliedFormat":1},{"version":"d472c153510dc0fd95624ad22711d264097ff0518059764981736f7aa94d0fa6","impliedFormat":1},{"version":"01fdef99a0d07e88a5f79d67e0142fc399302a8d679997aac07a901d4cf0fc83","impliedFormat":1},{"version":"ffcbdda683402303fa8845faf9a8fbb068723e08862b9689fc5a37c70ef989b8","impliedFormat":1},{"version":"208c5d0173b66b96c87c659d2decb774be70fb7a5d5af599a5d05f842b2e8d74","impliedFormat":1},{"version":"ec3b09b073a5e8a14fd5932cc4c33efaa0280c967d15bbc4c0c5b73a0d2f1a68","impliedFormat":1},{"version":"4b4c884e11985025294a651092f55dcbf588646d704e339674dfe51bdeead853","impliedFormat":1},{"version":"78c8b34f69c45078c6a3a3f10a24f1a03ea98495b6d75b945c1a3408a3ce5a26","impliedFormat":1},{"version":"0b1a08da571520eb288eb75843aad95d07fed423aba18b1149b5a0c767baf688","impliedFormat":1},{"version":"9c4708e703c8deb525e95946b3fdd8d5caaf724b3ac4a1cd6c2cab759b53f76f","impliedFormat":1},{"version":"ed14fb238769ed0b0dff6b78bef5263f0f50f403878ecd609fc71774b2113b12","impliedFormat":1},{"version":"59405847661d05bec9243efe9498211cb7e66d2620fe946e40750ffcb9e7d56a","impliedFormat":1},{"version":"ef95961bc90e8972bc9d88bee5264544d916929c0240e8c3c8ae220568b26ead","impliedFormat":1},{"version":"3f64230713c989e5f2d1d46c13fc8b2d9193b5dd59d393d5e70098c221894b1e","impliedFormat":1},{"version":"e49eeb0f93ea6a311a22f5b66a155c368e9cdb3585695fd951945df1a4192eb7","impliedFormat":1},{"version":"6f704837b406e4ac6ec5942018691ecc10e2d079cd64706d8ed1e86826d0671e","impliedFormat":1},{"version":"ee2229f4fc2d2306c864e5c2399aaa5958e4b3e1c964701fb8a84709237c9f47","impliedFormat":1},{"version":"6e5563614d424223f4748c6b714e1e197c8422824ff42fdc16f64484e1a863a6","impliedFormat":1},{"version":"8f31673ebf988cfc4b7ce2adb6a6c489dd748025600d8e2b7d922f952d7d21af","impliedFormat":1},{"version":"fd3715f87964b5fc26f4c333422969da8ca45e69e3fb6973ba6c806f437eb012","impliedFormat":1},{"version":"97b1e695f57dd56a6495f7bdca876981cc8db1cc4a555c3964aa14ce26e0f4de","impliedFormat":1},{"version":"cf32c06d23f373f81db3e93d47b7006f5bfc005df4d92bf5407b7792adcb3c47","impliedFormat":1},{"version":"eacc624e44f4b61dae0502e59ca5c0307dee65e7c257ee3eab4b2c8c6f156cd9","impliedFormat":1},{"version":"6041c1c22cb701abf3d98f153f878b12280f3b2213144588209b66ad5f5915dd","impliedFormat":1},{"version":"d95c6fb6552ca855ed11cdcaa5c68ad484bdc6325fd86fbadccdebfe57ed841b","impliedFormat":1},{"version":"0063b3ff097c4542be10322c67ca804e9e4504545b46ae8d620ceab59349ee84","impliedFormat":1},{"version":"9ff44b788f5d8d86f6fa34abf3faec8c425ecf1838248318acb0c5a4c88e62e7","impliedFormat":1},{"version":"4169cb216a6b361ba3caadf4a13670354e2a68ce055f4ec77ae7688902d2ab2d","impliedFormat":1},{"version":"e642a86d8e0956bb7c76aec21b83bde20409b19eb22786ed72ac5515aa9268c8","impliedFormat":1},{"version":"879e2a34d0139f04a32974fdfa44c5720619afd28f8bde0e5860f371d5f65d34","impliedFormat":1},{"version":"8e04860bdf072d4270b09b33b2b91ec4545297f23cc580041cad3e738f58d92c","impliedFormat":1},{"version":"bff595611ce25571f0cb50a83b7dcd7599559d6d3e98bf4fe87ad77b9c347664","impliedFormat":1},{"version":"2eced6af832d4e69811e353c7751f73bba07dc3b63189e0fa963e8264f341c12","impliedFormat":1},{"version":"a884b3560c8a29e5cb7f1263d880ff5c8b017991009edc20f450027c4a112b3f","impliedFormat":1},{"version":"6775c3e28d13ee126ec2c2e0827ec76422b0e11d9d5c2cfdfa7b982d48455fff","impliedFormat":1},{"version":"2ab0ffd4cdaff94c5cb8701f34442f8a018a2b62623528a66ad1ad8172ac6626","impliedFormat":1},{"version":"ea8215cf7cab1015579eac88e2f16fa1fabbe9f84ce4d2848c10f36d7df8ca1d","impliedFormat":1},{"version":"cc894fd562a73055ff72dcb7821729cef909b85bca4d0e2e2cbd0c1a2ecadeba","impliedFormat":1},{"version":"ab058bf3dbdbde6571f97a57a3b52b14be9d7e19f23190e9a551d5d6f6b6563f","impliedFormat":1},{"version":"142892cddebce23312318d79014de94e64a1085b8b0d73b942b4a6ce40a1b18d","impliedFormat":1},{"version":"db84257986e870ab22b304a80b02ea5e079c13a7f7be7891c0950bfd9e33f915","impliedFormat":1},{"version":"24cb43d567d33ac17daaad4e86cd52aba2bb8ff2196d8e1e7f0802faeeb39e95","impliedFormat":1},{"version":"dc6e0137694a7048ceba1ce02e6a57ab77573c38b1d41b36ae8e2e092b04ced2","impliedFormat":1},{"version":"aca624f59f59e63a55f8a5743f02fffc81dd270916e65fcd0edb3d4839641fbe","impliedFormat":1},{"version":"ce47b859c7ada1fbb72b66078a0cade8a234c7ae2ee966f39a21aada85b69dc0","impliedFormat":1},{"version":"389afe4c6734c505044a3a35477b118de0c54a1ae945ad454a065dc9446130a4","impliedFormat":1},{"version":"a44e6996f02661be9aa5c08bce6c2117b675211e92b6e552293e0682325f303e","impliedFormat":1},{"version":"b674f6631098d532a779f21fa6e9bdfca23718614f51d212089c355f27eea479","impliedFormat":1},{"version":"9dbc2b9b24df7b3a609c746eaada8bbc8a49a228d8801e076628d5a067ff3cc3","impliedFormat":1},{"version":"d6ea60339acf1584f623c91f5214be0ac654c0692c0c3abd69a601fe0ff0e165","impliedFormat":1},{"version":"d08badb0bbee55e449ea9ea7e7978cc94859804c49bdc7dc73e25d348337c0da","impliedFormat":1},{"version":"b116a03deacf70767f572c96a833e3c1adf01fff5c47f6c23e7bcb60c71359ba","impliedFormat":1},{"version":"023aedd02204fce1597fd16d7c0f1d7be13fcf4bc1ed28fb30a39587715ea000","impliedFormat":1},{"version":"b18adf3f8103e0711fbe633893cfbce2897f745554058cffa9273348366304d2","impliedFormat":1},{"version":"f41fbddb4a2c67dbf13863507b50f416c2645e7440895ea698605541d5038754","impliedFormat":1},{"version":"636a0fc7a5ee207de956241b8cc821305c8cc72b9f0bec69b9c9de15a9eafcfe","impliedFormat":1},{"version":"c326f85f762b14708a25b9f5c84691562f5cf39ae9148c00f990b8b4a2a4461a","impliedFormat":1},{"version":"caef5b191982cd88619282b10e1c52c3cde8c81d4eaf4650b4e62d73f77483d4","impliedFormat":1},"63a7983879036f467b46466c8360ed47a70db55a8c3d02181181dd629f9256a3",{"version":"de1cf67d3b9dace503c0544040dc4acd35f3a7f9912c00d2a04b087999336ac7","signature":"04f854046a20aca2a026c914b5fcbdb90f7b08bcb2cc6a35953e20e40f2200ea"},"36d7b8ded6867fa2eaba8b55f41504d7d5db0967a86d72635d34bcf10cd8b34e",{"version":"a6dca3804aba1f946b04d4a3b01cf91f91c167f4a0024e022fe3675bc363a598","signature":"caf1101b3030a602c7800d3ca21e22054e350ca16b5bd55def0c7605f96135ca"},"78c1eac4fadcf916d09bef94daeab7d032610da7632d1c2483e1a79e0fa614da",{"version":"9ff194a196707954313c197ff74831edf396ee89f6b6e50cd5fe9e07b8d7d46b","impliedFormat":1},"7af2cded11e7ce2a54233ec5eae020dda35621f22de86e892416adb043b081fc",{"version":"3312f7d9eb01483f9e392733e461f06755fdc624b5f2318e01f686a6a036ed7b","impliedFormat":1},{"version":"34491a67ae33c8bdacec1f4c07008f01d2ebe588ed8b7b1bd8f940f5fe953f2a","impliedFormat":1},{"version":"cc0e6f2705c8fd9eb831790840c08be6a3d3108d7c7043c4a1c0a97e3e9e289e","impliedFormat":1},{"version":"273928f388427cb6d6859c6b29d760de7612a110f8a50afe092d3a6440ed0cd3","impliedFormat":1},{"version":"54db43f6a831781a4587d81802277a9686bf34680c586fc0496e32088f2d8942","impliedFormat":1},{"version":"0f53259dab3f0531bfefb89211d4be171821c855980a843b396e9dcf06ab23a3","impliedFormat":1},{"version":"b1b1faeb576467d84ffaab5942f6bd5a024bb715dae28aaeeb22b37cc0f17030","impliedFormat":1},{"version":"a7380d88b8153951784d10b663b949986aa02c238d7aba129d378bc8f0bd2900","impliedFormat":1},{"version":"2110f6c3b26b0d0af8f4d0d7bf8fe89cafbe2a200cc2187db2e446c57628b67f","impliedFormat":1},{"version":"b2d0ca3686d89f74053a1d0d90e8088b9d48869c9814db2cce4554585c83094a","impliedFormat":1},{"version":"6491db94d895853640fd0c6814aa5decc2458a6085193abbd7a83a0a65736a30","impliedFormat":1},{"version":"ce8cd3fcda8947836cb52af1f9a5958fb9cea1ed5eb53466227a82c079ba5622","impliedFormat":1},{"version":"5a081b7e2596e450b5bbcd5c5556806b85bf2c0bdb6b7fbcd640dfa6339a0bb3","impliedFormat":1},{"version":"aac73aa91eb81c430a982c274181ae5768c1c631dd659e603a7070b0310d9d40","impliedFormat":1},"20c7945340b58e982aa79db5a549b5c33ef2dd8dd8c5c71d29c308be0a9ebaee","3bf3a1abfdff65c0dad99949f8aeeefdb65cc943a7175774e1751e1085f06b6c","c1d4d4444aba9b01cb64dd485fe7c8ed3575fae862bc5977db4836ba02890a6a","fa7f2e8b69aa84a64dcf0417f8a8d9719b11af3776c4c1ef35f63e9895cde3b2","daae3fef862be66a4f3d019dbca43534e1e84c56b4b488ebdadcf71d7c93ac4d","bdd3a7ac1f79283acbc594a8d7b17fb3186eb7ff42d19b57f113f7cfecc05ed1","95d4125fa23520b53f94144c541372f2e4aacf495ba6c6f01a76e6ab4aa7f39a","471d2936b56890579899605818de833a454f2e8950a1816394a79d492ba9d94b","297ba6d7e4e8c638f366363cb8d85141fdb1c2daaa6b06ba257eac005ac978fb","0baddfc43f36b1b20d5b3f08162039f860d19470299795b17c44eb8631d4d956","10252be95a2e479a4434d42db379a2331359386072e9a15b2b3e366020616c4c","62612748bead131af42d1680779fe254cfa5a59e87a484fa22e078bdc9978d10","8eb25039b561bc9f7994190dafa895ef1c3438a7576de564f57cc8e7f9f9c47f","ea79deb2c6f4040dc55bd04e4a37ea36858d7e59ae354ebc0eccaa2698fcfeb5","91883e5a7e00b0bc6e87ac5989af4c21de2377268e6bc15379ec1eaae601db50","7c12eca255521629498c645929488f10adfc8c6e03cd4e343115718e5cbec0b1","4c15633afa04ae5207867257f5a56ab0e76c10be5e9ae6b9f9ce7be9a03cd67a","a0630ded9a175c1fc3fca8488e5b04c3954565bd723cbf89e997fde070c2c8c3","3b33ec1a7c1ba2685df026fee39a51c6f7a1db65ebedd9489e50187bf74b6812","3dacc5b5e74ed8864cf1b499d718e937bcec987edff316303d84b0738bb8c28c","5c952d2701fe9cae4313b08b39995dfe280f8e3dd143206aaed88a9369f70c9b","1750df344be53385979e126bf8411a36b545091d74f719327c805e77bd5abdef","4b2b3a557bb745adc2003f01ac67a42ffaec553b3363e84c455e304818de8411","41b37536c68576a51e4a027a6c057de6e3f581967fbdfef4d88e56ce3cd9754a","d763c69fddb176fcae60ee69e091f9ae4b9ef8247abe142ef034b04d9855dd34","ecc2e5e7824d6de1118b83f4d4e3ba4315ac3100ad3b334f091309c38041c34e","48af7517257558314b62056f4ac95d2eb262d4af1489cd925d6f799d5a01904b","43e1113c7fb7a8d33aa20e34a2b9dc8ee5802f95fc5cf9876169931b2934fc33","45f46f7810e24cd766508538e7184733a5b8e3bce1796cfd131fc5a51a9a6260","6c298f95b95399bd38f4bffbd92fc2934e7acd8c700d09d178aa5e4aa99eae3c","dbc5d120ae090bc3b86c888ab051cfacf5e6e214ecfbeada46d3da75039c5012","f3f28aaf7089d69817203730645c71ebe7b21f0b29bef967f4b61b51b27990ed","313c8aafe4e94425f066c93067550d37ca0b15621e1086595a53dea95a974b45","29271907eff0763b42558502632c8a3967be0df3c27432fdabcf0429266157e7","1f43bc59dff60fd58fb5115edc06dbf752022ff4ce091f339879265ed79e1143","fa0267687f9ea8b57f4404ab5f6ce654b89ebf2221a09175d56a8b30df74f636","9a59d5981c4cf2e0574120a1d9c8abe5a18a00e9059f5c3eb499daf22fe12154","f031e290da3a6623e47c7d36933f8fbc5cd1c8b50c391e7e3d81366e07a2f613","2ab3f67c979d3939bd52826532d24ac26cad3ed138c03cc468245fdba7beb290","498c2abd4fd3d4068cac59a57e26311229e155651b2b589fb1784451eec77d14","9d7f4716d0d172817827aef036d4a39e7a95b3af1aec1614572fd271fa148de8",{"version":"55a914fba7f17f73eb971e012bcb90221d5dca20751852c217428a5511db57a4","impliedFormat":99},{"version":"d9b54195cd22859480b70a2e287c41e654c812b0d3945652bd08c8943ddef78b","impliedFormat":99},{"version":"73b32be132963c6e06bb2f833ea0c21116581a3aafc8ac9145cc89a0b6f54bc0","impliedFormat":99},{"version":"73597a22736b6efce7cb30e380705cd6572d9e3f9816068130ec09550129996f","impliedFormat":99},{"version":"04504c465aabfed05529bf3b314df66c4eb449b188547c51edb962d8eb6069e0","impliedFormat":99},{"version":"09466b34e26295ee836861fa6348aff7b2275c6220cc0b41040c9949421e052f","impliedFormat":99},{"version":"242ce683695df72f1cdd40ae2ac06c569412e533528de95d956b26218cd195f5","impliedFormat":99},{"version":"d75a572cfd779c99cbdab5f8f44f6ce465367c057c07e33364d186de41ad9b14","impliedFormat":99},{"version":"8d12c3032607835687037e28dc245a4af486ef4aa6e6cb13744dcb0a3b074ab4","impliedFormat":99},{"version":"7ee2d1edc6f59a50eaeb12ac61a74ab4832f64661f795131df23ac8256df2329","impliedFormat":99},{"version":"8fea385f7e21a39e857e3fae89eabde7b0960083d205177430be507b38413579","impliedFormat":99},{"version":"7fdb8950d8a019940182ff1f50d02809a45832121b9a7899677a497aaba506ce","impliedFormat":99},{"version":"530e23db4425868edfc20e35fe2d8acf047af5b6f14afa46ee2e0e71e40c8df1","impliedFormat":99},{"version":"7cf421c4c6e223d2b648dae0ea51a134c4c8a5d8d55db1287372c4c1569c656f","impliedFormat":99},{"version":"ee662f8ffa58a60ca3ca8c141d4910043216efe63f696146b6fa0a455a4f9034","impliedFormat":99},{"version":"4eb4f2e56895129861a971177f8e9241ccf633daae3a6ac7343b92e973381c26","impliedFormat":99},{"version":"c75223aab2bfbe3fe85211fe56cfc844dd93d33e503e22e9911fd0d3e6f6538f","impliedFormat":99},{"version":"8fcea3d952a8129821d4060969f305a341706c256cb8002aba8e5b07088c24ed","impliedFormat":99},{"version":"2a6cef87ea83b5bdbc862e894329ba11002e76d5fb6ab24247502ecad2c6fbe7","impliedFormat":99},{"version":"39248c14bedc3e2d734739452408661523228ec790d7142a4de185ae88904da4","impliedFormat":99},{"version":"c14433af8654964ed33f9cc16f9369e05ae543d56bbc6a1c3b393fa7077f08a1","impliedFormat":99},{"version":"d867a5469eabe8abab25b27abb7125ef2ba019ef42dd1ca2b5d0871513042629","impliedFormat":99},{"version":"89fc4cad6ac7ac6d922523b3ab51462b050189ab335766149e5cc777483d4e1b","impliedFormat":1},{"version":"c031417387ddbb2923f41e3fc94b49157745785281c8949a221cd69368610086","impliedFormat":1},{"version":"73ef706b29d220404677226880137ad0da0145b6a2332d5427b9517dee295e70","impliedFormat":99},{"version":"89fc4cad6ac7ac6d922523b3ab51462b050189ab335766149e5cc777483d4e1b","impliedFormat":1},{"version":"27b14b091ccf309c79f3d2cf226edfa4d533b131f19bc0cbe855adebd464c285","impliedFormat":99},{"version":"50854b8ef4c29f3e952f170aaa045604a9d90360b680ddaeff542d1f5bb5fa8c","impliedFormat":99},{"version":"caa3a0be5c051f52e27b91642c8b31037c09ad0b65288498f4c55e33be7ea249","impliedFormat":99},{"version":"48020f2aa87dd71c26414f9afdf172159a6c31186705417da52add9d6cfe2153","impliedFormat":99},{"version":"f4e5a6883146482d6b49c1406f99a38b1ef883382b169bb5fc6cf7cf9f2ac70c","impliedFormat":99},{"version":"8b7b4f82a54a847a29fa481af4ea74372c19b75379bd27658c2a819149f21871","impliedFormat":99},{"version":"4f7faca5821e340342ea0feb3d478126659ece37d5dfdd6d9c9536bfd48def34","impliedFormat":99},{"version":"99878cc85152e70be715546f165826d83cf033547b4647cc3cc9cbd6d4df429a","impliedFormat":99},{"version":"7677f5595e7bdc2e6e42ebe8b4df4f4b520b28f6f175c839b73a208e6f3c8907","impliedFormat":99},{"version":"fd7faa9225e2e61a0a3d786a7a859af52dcb295c06bce7dfca140037655dc095","impliedFormat":99},{"version":"af0f7e3281ab0774f26ca8bc36d6aa37709f3510c8c1eb0ab122e7063159be01","impliedFormat":99},{"version":"960096f9e2ff9e9019e1c23a04916f2005d4c8dbd43f96b196d754b6c8a16700","impliedFormat":99},{"version":"c7c18305c761411b3c168f2b3376101b60d7a7d7c0505e81c6d8193a418f3d63","impliedFormat":99},{"version":"6b9a76dbc0ac3a427aa7370981cea9aea0e8286453b189dd03776f1034f7847c","impliedFormat":99},{"version":"3e48026dd0f58d4668dbfa9c6747302dcbc52e3aec373ec1f95c2ba78c308f33","impliedFormat":99},{"version":"053f54680ea9b4b1a8e9e5fe9f4a1fdcbc00f8f9b6d895109eb0d169915dfd11","impliedFormat":99},{"version":"3b0f440d9e4227285cec9159b1a472bc885687baf227a7b4126e2ba6dbef96fc","impliedFormat":99},{"version":"656e3a4ac005fcb1513ab1224eacfd55ae04b6f16d21d66c971dc901dad62c66","impliedFormat":99},{"version":"ea4891706f147e494a2a7028b2376110c2e85b7561b27448d51a7d1277c6fcf2","impliedFormat":99},{"version":"7f9bb3e6bb8d0607f94d1498c5fa8ac7445fcb4af52d0775a857d0986e0d0c84","impliedFormat":99},{"version":"c98c85d5b894c8955950338b1091f0febdc6c6702cf3b67a171d29d80fb2dfce","impliedFormat":99},{"version":"d00addf28fd877e3f8109b592b1918084cfb831268a0fd052fa72e6e01390cca","impliedFormat":99},{"version":"0cc0f30db3c4a2577606c6930eac2814d0463148d1bf02be9eaa318d6cb6d40e","impliedFormat":99},{"version":"21fb062824012292b09e9357aa7ac3231a0d683a7fbb9bc8e2b027346c7bcb32","impliedFormat":99},{"version":"9aa939dd1371c068dcda7d17c32fcbee08fa994890fefac8ad39d8cd5a294d92","impliedFormat":99},{"version":"8c0e829b03024d1905dba908ed55a5808d79159709770fe7a3b0395fa78125c6","impliedFormat":99},{"version":"15e6253aeb724521fcd0fd8bab60ac00b40e1b6c39aabb0de3b3e45ebe2d584a","impliedFormat":99},{"version":"4d3a0370e69c2d70d62a2eaeb40512474e38b4dff1a4e7ac98637f954ec5c143","impliedFormat":99},{"version":"b0094b81741504d0282359218e3659f5282b9748ad0e80d9a1c634bc1c88af4b","impliedFormat":99},{"version":"2c8e3d7848994c490cace467a6aae3fc4908e5b577b5ab0996200497062bb80b","impliedFormat":99},{"version":"6db32445cedcfaf6f6a4dbb922cdaf87e1cfc0422e4a31efeebef3fb0eb1a93b","impliedFormat":99},{"version":"b5102cfc507fe0c916a9ad45f4f52e00e3959b90eb90c5873e9527cb37eadb78","impliedFormat":99},{"version":"21e3abbcf80dc69638d138f5c6d07f596f8a162a8dca3bd71286403a96f8d0ab","impliedFormat":99},{"version":"20eab98ea24e9bf8834db1a339abb373e6f6a268537efa1fd571cd3809839eb1","impliedFormat":99},{"version":"796885a2efe76d5bef797516bd3a798b275f81075da8497fc1f6a9d3e085f2a8","impliedFormat":99},{"version":"b5a2192e328273da5a8279add3052bbc33b1adecb15f34a577c69c4dd2766d8e","impliedFormat":99},{"version":"20126c8c53f22550e68edb187f5d4d477b79a2effe7801fff3aa47949219d67b","impliedFormat":99},{"version":"8b63cf9a4a5bafaa3d2e157e6d07bb20d0d73fe0c5ddda715342a48d18534154","impliedFormat":99},{"version":"369dd195a978dcb88d63f1f1878e5dabb90bbc79b3e5fb0f16cf06209ab9e7aa","impliedFormat":99},{"version":"090b7d0fd37b238e003029b9137d5dff073791e21adaac556dd7524ed9ed977e","impliedFormat":99},{"version":"efedab846f4656f034814230fc05513b8cefb5f95994faee4f9b174c98bfef41","impliedFormat":99},{"version":"4f8876f00aa99ae0b39d6bca9da9e86f426dc6c458558773a647100a85fc3312","impliedFormat":99},{"version":"a13e1f68a2a1f29ceac30f51562e13677a5b8615377af952f0b7d1f9edff34f4","impliedFormat":99},{"version":"06f1e24d4146a779e7fd7a0f0cfdcdcb878da25e271e1e7d5d7f81d874f2dbec","impliedFormat":99},{"version":"0a3ede23be099f3ad266a10b4ad0cfb6efd446b9951f553274706348c3b56dae","impliedFormat":99},{"version":"c7b05cafd385f8988babecd476f4f9c817ecc68141dad54e2dd3ae458878a8f4","impliedFormat":99},{"version":"8fc8726fe9d96e0440518b06451181cabba87bdcb60a6e854b77e2b6dab52890","impliedFormat":99},{"version":"6cb381987d43f853d8d01c2fd5f32627e0c0f3a4dd1a11d5e3f94ff5832aff2b","impliedFormat":99},{"version":"ba0567434dbadd0fb8e80c4e00fb9c30449497f8bf07e82b2b857db0029f9b18","impliedFormat":99},{"version":"f72e417b7d49a5dec2d4f3857f6925ee78608cda1c42655d0179ccd38c66c15a","impliedFormat":99},{"version":"fdbb1158637d3ca4d209c7174270e5eb1414b4ee5324e9c33b1fae88e83bfc14","impliedFormat":99},{"version":"436cdc04f8ad3a54d2194b9926f52d564157ca162dcf3c9f71fa4711d057190b","impliedFormat":99},{"version":"73d9180a0b84dfb4c1a95bf72028103bd81472595617dd7ce788ea21639bcee4","impliedFormat":99},{"version":"55c1b951a4d7289a3056e2edea9855671a9d1f8f09632916ed1fb2aebb57b5c6","impliedFormat":99},{"version":"09b1271f73d90a01c889b4963a350825cff11493498b4141fde2399ce09de43a","impliedFormat":99},{"version":"bb9c7998d6def957496260f4c881ccc5b3d4eb4084ab00fbd8abc8c1e1ba67b7","impliedFormat":99},{"version":"340efc3f335a2a3ea2ca1899755906bcb6ebcbddf14306e66d0f16746db98273","impliedFormat":99},{"version":"6a691651e2748bf7792a251d820f00e8d9d3e4da1cdfbea91c33beda2bdd8b89","impliedFormat":99},{"version":"c3096b0c0f579462e17c525ee6835d82952c32b35061a1d32ac32d7e0f191da1","impliedFormat":99},{"version":"91b3c513f0ca4e2d0c5bc9ba1f43b169e1da7c49ff2cf5ffe730009c229f359f","impliedFormat":99},{"version":"ea0b435818ce832634961d1b65e972927f65a3c29a3e2c0cec3aafa0d7fe4ea0","impliedFormat":99},{"version":"50fe63347779cd2244429e0d54148fdb5d230dcc11f2bb8c7efc9d12c1e573d2","impliedFormat":99},{"version":"7adac175e5942f34a34f223d213bdd9869935ec6083dc6da836b996b7acdf7d5","impliedFormat":99},{"version":"2af0e322d1c39e8b16436cd9bd9c97b6013b75c179281df61afa10df0c722a1b","impliedFormat":99},{"version":"09b1271f73d90a01c889b4963a350825cff11493498b4141fde2399ce09de43a","impliedFormat":99},{"version":"0ef3eabd40fcec506413988e397ff7dcbed2aebfe4f88c486e2ba8dd1bc0ee0b","impliedFormat":99},{"version":"44dce86f2b5ef5e38fe6c068bc629afc04221adfa039f0dd649ae10f799f9ec8","impliedFormat":99},{"version":"5ad41356543df4a83b3ce069a7e628d2ba648399db0bdd4005bd1dfef26d34e2","impliedFormat":99},{"version":"0b448474270be29ded59bb946ac311c40c579ef0b9cf358a54750eef34359088","impliedFormat":99},{"version":"d7ddde645d6ca5b97f75923b3946e96495f81d7f4fd568201653f1939a3312a3","impliedFormat":99},{"version":"fb1148873f0d706261f8517b7ce3574b369c8213e8304c7c21cb9ca248b8dcc3","impliedFormat":99},{"version":"0637ec66edeed3f9ee0da72c0d5ab2c128db9e5a6226f8aca5672aa617db1726","impliedFormat":99},{"version":"ee49e1206cf12b67d5b72a98eaab773481130b87a9eeaa262086a4314d1cd991","impliedFormat":99},{"version":"9fa29d6f0b05ee8f619202c07680a46025b166da55e431a49c5badaa2983429b","impliedFormat":99},{"version":"f53857d23110842c0c62416b09caccb9286b3ba52fa2b6bbe254c58123d9bb09","impliedFormat":99},{"version":"89c02b0ad4fc44d10576b3e37c2c5262a37f2db171a486d2d5960ee60323bb96","impliedFormat":99},{"version":"59348badf356a43f7e1847364a8fdb8a914b9977a517b41f3ed206db36b875c1","impliedFormat":99},{"version":"ff0c09d8b0c8c0ffb09ef9250fac17c98eb4dd5a4f4955d53fc3880d6553b91b","impliedFormat":99},{"version":"07146d909fcbc1d33c5fc02f74dab3750d075a4de305a6c078fff8265e089c5e","impliedFormat":99},{"version":"b323496b42ebb7f2839ef1acb04947c74cc586c8ad20cc936c069d34b98a29ac","impliedFormat":99},{"version":"62159930f535b73f265f98f669c7f7bbdaef719ebc2de3a2bc4835e71ed68ba0","impliedFormat":99},{"version":"6ae1d121a8c1ff3398eff8af6e398868b631689d120076d7004c787479eacc61","impliedFormat":99},{"version":"d23bfd5a61fb32048f370f988a9772966651be1380c1a93c199d7cb25b7b0cf0","impliedFormat":99},{"version":"7344e1d823581d72124f6a328669abbeec44910c2045823bf7e7bef79ca49f73","impliedFormat":99},{"version":"af4a6e7559998dac4978f02c572d0f391928b6f40c62459c1e4ae5afc12995c7","impliedFormat":99},{"version":"b0a2a4c5ca7f6f874de72e39be8f470b348ec062c005cb5a7acc840fd7f67807","impliedFormat":99},{"version":"75083e759d8b09bcbf201a250c918a35221d05c7524cbb67b2b4d8959c919252","impliedFormat":99},{"version":"d89f7811a420d990b817f383c3fec421559063a7cb744fae619e8bba20dd151d","impliedFormat":99},{"version":"abd03428933117fdb9db45ac492eaac24d9a77c37c3944d26dba044b7fce6870","impliedFormat":99},{"version":"97050f022128934adae6a773a63be3c5bd5726f153fb72e9a8d34f2656135de2","impliedFormat":99},{"version":"3901f637d5f111593a5ea39a31d27e7a5f62195251f4ed6a50b77a020bc6e416","impliedFormat":99},{"version":"7edffa8d9c968f6a96b6ffc774be07717378ec619777e78510a7b6de4bfe67df","impliedFormat":99},{"version":"8f8d24c887f993b6c131075ac4f82cefbb246747b22c50491dc64ffd2cb340d9","impliedFormat":99},{"version":"5ffb8c07f5474d45bab306b6267ef2777ad786a841e0942416f485125cbd2385","impliedFormat":99},{"version":"e0d7a3cdfaa21621610dc3b74f8ccd59a5cd8617843ded1d610f05bf790adde6","impliedFormat":99},{"version":"b8f4165a3fa8fea167bb5016ad7629581d8fffb16447217d480c8a7ea438ed8d","impliedFormat":99},{"version":"b936b8e4ad57e3be1407c74e36645d31bebe7f1183d926a0c438cf416ec708f5","impliedFormat":99},{"version":"13fc27c27bc9a42e5e0c4cc08b64e7693b225c565bdab45ace16c179760f3cc9","impliedFormat":99},{"version":"8ff87eb5acdf565af022fb9145942b2207ac8cd0644917bc7d44efb91f4115d3","impliedFormat":99},{"version":"616ff480886a32cf50f73c4ee5fdd9672a5f21428eadcac34c41acb06035c214","impliedFormat":99},{"version":"f08e5842644a8e03da9efdbf89bf4eb61ea906a3bbc255bd7d7583756cb3dc61","impliedFormat":99},{"version":"562682efb4f43e58eb779a742f3e26c1fd796da0b785620de601202a38764785","impliedFormat":99},{"version":"264f935450101e4b000eb351cf75c9d799ca20a278b260a9e5770303b5f2b6a3","impliedFormat":99},{"version":"f6f171b23ae6db93454343f1b788960f799c8f37043904874a752c0990c6fca6","impliedFormat":99},{"version":"089f9928e7ab1ca2c225e167a80ff1cb5ed0a71c98be7e81f040a51e2cc6bf5e","impliedFormat":99},{"version":"b11acc27c280988d7256bbd8ffe9f1cb5a0e5ed17cddf5335289ee0e81500369","affectsGlobalScope":true,"impliedFormat":99},{"version":"02ab5dbcaa58da1d58c46c7cdfa7f94792c5ccf0fc7c0622ef33755fe415366c","impliedFormat":99},{"version":"e689cc8cd8a102d31c9d3a7b0db0028594202093c4aca25982b425e8ae744556","impliedFormat":99},{"version":"478e59ac0830a0f6360236632d0d589fb0211183aa1ab82292fbca529c0cce35","impliedFormat":99},{"version":"1b4ed9deaba72d4bc8495bf46db690dbf91040da0cb2401db10bad162732c0e2","impliedFormat":99},{"version":"cf60c9e69392dd40b81c02f9674792e8bc5b2aff91d1b468e3d19da8b18358f8","impliedFormat":99},{"version":"3e94295f73335c9122308a858445d2348949842579ac2bacd30728ab46fe75a7","impliedFormat":99},{"version":"8a778c0e0c2f0d9156ca87ab56556b7fd876a185960d829c7e9ed416d5be5fb4","impliedFormat":99},{"version":"b233a945227880b8100b0fec2a8916339fa061ccc23d2d9db4b4646a6cd9655f","impliedFormat":99},{"version":"54821272a9f633d5e8ec23714ece5559ae9a7acc576197fe255974ddbd9b05d6","impliedFormat":99},{"version":"e08685c946d49f555b523e481f4122b398c4444c55b164e5ac67c3ba878db8d1","impliedFormat":99},{"version":"3c99d5232a3c8b54016e5700502078af50fe917eb9cb4b6d9a75a0a3456fcd5d","impliedFormat":99},{"version":"9d8e34ec610435ee2708595564bbad809eab15c9e3fa01ad3746bbe9015faaed","impliedFormat":99},{"version":"7202a89bea0bdab87cc0ae60912b9e631a48f519b6a1f323dba8bc77a02a3481","impliedFormat":99},{"version":"f865343c121abc3516abf5b888d0c1b7596ec772229d8e4d4d796f89e8c9d0c0","impliedFormat":99},{"version":"77114bdbc7388aeeb188c85ebe27e38b1a6e29bc9fea6e09b7011bbb4d71ec41","impliedFormat":99},{"version":"3df489529e6dfe63250b187f1823a9d6006b86a7e9cac6b338944d5fc008db70","impliedFormat":99},{"version":"fe0d316062384b233b16caee26bf8c66f2efdcedcf497be08ad9bcea24bd2d2c","impliedFormat":99},{"version":"2f5846c85bd28a5e8ce93a6e8b67ad0fd6f5a9f7049c74e9c1f6628a0c10062a","impliedFormat":99},{"version":"7dfb517c06ecb1ca89d0b46444eae16ad53d0054e6ec9d82c38e3fbf381ff698","impliedFormat":99},{"version":"35999449fe3af6c7821c63cad3c41b99526113945c778f56c2ae970b4b35c490","impliedFormat":99},{"version":"1fff68ffb3b4a2bf1b6f7f4793f17d6a94c72ca8d67c1d0ac8a872483d23aaf2","impliedFormat":99},{"version":"6dd231d71a5c28f43983de7d91fb34c2c841b0d79c3be2e6bffeb2836d344f00","impliedFormat":99},{"version":"e6a96ceaa78397df35800bafd1069651832422126206e60e1046c3b15b6e5977","impliedFormat":99},{"version":"035dcab32722ff83675483f2608d21cb1ec7b0428b8dca87139f1b524c7fcdb5","impliedFormat":99},{"version":"605892c358273dffa8178aa455edf675c326c4197993f3d1287b120d09cee23f","impliedFormat":99},{"version":"a1caf633e62346bf432d548a0ae03d9288dc803c033412d52f6c4d065ef13c25","impliedFormat":99},{"version":"774f59be62f64cf91d01f9f84c52d9797a86ef7713ff7fc11c8815512be20d12","impliedFormat":99},{"version":"46fc114448951c7b7d9ed1f2cc314e8b9be05b655792ab39262c144c7398be9f","impliedFormat":99},{"version":"9be0a613d408a84fa06b3d748ca37fd83abf7448c534873633b7a1d473c21f76","impliedFormat":99},{"version":"f447ea732d033408efd829cf135cac4f920c4d2065fa926d7f019bff4e119630","impliedFormat":99},{"version":"09f1e21f95a70af0aa40680aaa7aadd7d97eb0ef3b61effd1810557e07e4f66a","impliedFormat":99},{"version":"a43ec5b51f6b4d3c53971d68d4522ef3d5d0b6727e0673a83a0a5d8c1ced6be2","impliedFormat":99},{"version":"c06578ae45a183ba9d35eee917b48ecfdec19bb43860ffc9947a7ab2145c8748","impliedFormat":99},{"version":"2a9b4fd6e99e31552e6c1861352c0f0f2efd6efb6eacf62aa22375b6df1684b1","impliedFormat":99},{"version":"ad9f4320035ac22a5d7f5346a38c9907d06ec35e28ec87e66768e336bc1b4d69","impliedFormat":99},{"version":"05a090d5fb9dc0b48e001b69dc13beaab56883d016e6c6835dbdaf4027d622d4","impliedFormat":99},{"version":"76edff84d1d0ad9cece05db594ebc8d55d6492c9f9cc211776d64b722f1908e0","impliedFormat":99},{"version":"ec7cef68bcd53fae06eecbf331bb3e7fdfbbf34ed0bbb1fb026811a3cd323cb4","impliedFormat":99},{"version":"36ea0d582c82f48990eea829818e7e84e1dd80c9dc26119803b735beac5ee025","impliedFormat":99},{"version":"9c3f927107fb7e1086611de817b1eb2c728da334812ddab9592580070c3d0754","impliedFormat":99},{"version":"eeae71425f0747a79f45381da8dd823d625a28c22c31dca659d62fcc8be159c2","impliedFormat":99},{"version":"d769fae4e2194e67a946d6c51bb8081cf7bd35688f9505951ad2fd293e570701","impliedFormat":99},{"version":"55ce8d5c56f615ae645811e512ddb9438168c0f70e2d536537f7e83cd6b7b4b0","impliedFormat":99},{"version":"fa1369ff60d8c69c1493e4d99f35f43089f0922531205d4040e540bb99c0af4f","impliedFormat":99},{"version":"a3382dd7ef2186ea109a6ee6850ca95db91293693c23f7294045034e7d4e3acf","impliedFormat":99},{"version":"2b1d213281f3aa615ae6c81397247800891be98deca0b8b2123681d736784374","impliedFormat":99},{"version":"c34e7a89ed828af658c88c87db249b579a61e116bea0c472d058e05a19bf5fa9","impliedFormat":99},{"version":"7ae166eb400af5825d3e89eea5783261627959809308d4e383f3c627f9dad3d8","impliedFormat":99},{"version":"69f64614a16f499e755db4951fcbb9cf6e6b722cc072c469b60d2ea9a7d3efe8","impliedFormat":99},{"version":"75df3b2101fc743f2e9443a99d4d53c462953c497497cce204d55fc1efb091e0","impliedFormat":99},{"version":"7dc0f40059b991a1624098161c88b4650644375cc748f4ac142888eb527e9ccd","impliedFormat":99},{"version":"a601809a87528d651b7e1501837d57bb840f47766f06e695949a85f3e58c6315","impliedFormat":99},{"version":"d64f68c9dbd079ad99ec9bae342e1b303da6ce5eac4160eb1ed2ef225a9e9b23","impliedFormat":99},{"version":"99c738354ecc1dba7f6364ed69b4e32f5b0ad6ec39f05e1ee485e1ee40b958eb","impliedFormat":99},{"version":"8cd2c3f1c7c15af539068573c2c77a35cc3a1c6914535275228b8ef934e93ae4","impliedFormat":99},{"version":"efb3ac710c156d408caa25dafd69ea6352257c4cebe80dba0f7554b9e903919c","impliedFormat":99},{"version":"260244548bc1c69fbb26f0a3bb7a65441ae24bcaee4fe0724cf0279596d97fb4","impliedFormat":99},{"version":"ce230ce8f34f70c65809e3ac64dfea499c5fd2f2e73cd2c6e9c7a2c5856215a8","impliedFormat":99},{"version":"0e154a7f40d689bd52af327dee00e988d659258af43ee822e125620bdd3e5519","impliedFormat":99},{"version":"cca506c38ef84e3f70e1a01b709dc98573044530807a74fe090798a8d4dc71ac","impliedFormat":99},{"version":"160dbb165463d553da188b8269b095a4636a48145b733acda60041de8fa0ae88","impliedFormat":99},{"version":"8b1deebfd2c3507964b3078743c1cb8dbef48e565ded3a5743063c5387dec62f","impliedFormat":99},{"version":"6a77c11718845ff230ac61f823221c09ec9a14e5edd4c9eae34eead3fc47e2c7","impliedFormat":99},{"version":"5a633dd8dcf5e35ee141c70e7c0a58df4f481fb44bce225019c75eed483be9be","impliedFormat":99},{"version":"f3fb008d3231c50435508ec6fd8a9e1fdc04dd75d4e56ec3879b08215da02e2c","impliedFormat":99},{"version":"9e4af21f88f57530eea7c963d5223b21de0ddccfd79550636e7618612cc33224","impliedFormat":99},{"version":"b48dd54bd70b7cf7310c671c2b5d21a4c50e882273787eeea62a430c378b041a","impliedFormat":99},{"version":"1302d4a20b1ce874c8c7c0af30051e28b7105dadaec0aebd45545fd365592f30","impliedFormat":99},{"version":"fd939887989692c614ea38129952e34eeca05802a0633cb5c85f3f3b00ce9dff","impliedFormat":99},{"version":"3040f5b3649c95d0df70ce7e7c3cce1d22549dd04ae05e655a40e54e4c6299de","impliedFormat":99},{"version":"de0bd5d5bd17ba2789f4a448964aba57e269a89d0499a521ccb08531d8892f55","impliedFormat":99},{"version":"921d42c7ec8dbefd1457f09466dadedb5855a71fa2637ad67f82ff1ed3ddc0d0","impliedFormat":99},{"version":"b0750451f8aec5c70df9e582ab794fab08dae83ea81bb96bf0b0976e0a2301ee","impliedFormat":99},{"version":"8ba931de83284a779d0524b6f8d6cf3956755fb41c8c8c41cd32caf464d27f05","impliedFormat":99},{"version":"4305804b3ae68aebb7ef164aabd7345c6b91aada8adda10db0227922b2c16502","impliedFormat":99},{"version":"96ae321ebb4b8dcdb57e9f8f92a3f8ddb50bdf534cf58e774281c7a90b502f66","impliedFormat":99},{"version":"934158ee729064a805c8d37713161fef46bf36aa9f0d0949f2cd665ded9e2444","impliedFormat":99},{"version":"6ef5957bb7e973ea49d2b04d739e8561bca5ae125925948491b3cfbd4bf6a553","impliedFormat":99},{"version":"6a32433315d54a605c4be53bf7248dfd784a051e8626aeb01a4e71294dd2747f","impliedFormat":99},{"version":"9476325d3457bfe059adfee87179a5c7d44ecbeec789ede9cfab8dc7b74c48db","impliedFormat":99},{"version":"4f1c9401c286c6fff7bbf2596feef20f76828c99e3ccb81f23d2bd33e72256aa","impliedFormat":99},{"version":"b711cdd39419677f7ca52dd050364d8f8d00ea781bb3252b19c71bdb7ec5423e","impliedFormat":99},{"version":"ee11e2318448babc4d95f7a31f9241823b0dfc4eada26c71ef6899ea06e6f46b","impliedFormat":99},{"version":"27a270826a46278ad5196a6dfc21cd6f9173481ca91443669199379772a32ae8","impliedFormat":99},{"version":"7c52f16314474cef2117a00f8b427dfa62c00e889e6484817dc4cabb9143ac73","impliedFormat":99},{"version":"6c72a60bb273bb1c9a03e64f161136af2eb8aacc23be0c29c8c3ece0ea75a919","impliedFormat":99},{"version":"6fa96d12a720bbad2c4e2c75ddffa8572ef9af4b00750d119a783e32aede3013","impliedFormat":99},{"version":"00128fe475159552deb7d2f8699974a30f25c848cf36448a20f10f1f29249696","impliedFormat":99},{"version":"e7bd1dc063eced5cd08738a5adbba56028b319b0781a8a4971472abf05b0efb4","impliedFormat":99},{"version":"2a92bdf4acbd620f12a8930f0e0ec70f1f0a90e3d9b90a5b0954aac6c1d2a39c","impliedFormat":99},{"version":"c8d08a1e9d91ad3f7d9c3862b30fa32ba4bc3ca8393adafdeeeb915275887b82","impliedFormat":99},{"version":"c0dd6b325d95454319f13802d291f4945556a3df50cf8eed54dbb6d0ade0de2f","impliedFormat":99},{"version":"0627ae8289f0107f1d8425904bb0daa9955481138ca5ba2f8b57707003c428d5","impliedFormat":99},{"version":"4d8c5cc34355bfb08441f6bc18bf31f416afbfa1c71b7b25255d66d349be7e14","impliedFormat":99},{"version":"b365233eaff00901f4709fa605ae164a8e1d304dc6c39b82f49dda3338bea2b0","impliedFormat":99},{"version":"456da89f7f4e0f3dc82afc7918090f550a8af51c72a3cfb9887cf7783d09a266","impliedFormat":99},{"version":"d9a2dcc08e20a9cf3cc56cd6e796611247a0e69aa51254811ec2eed5b63e4ba5","impliedFormat":99},{"version":"44abf5b087f6500ab9280da1e51a2682b985f110134488696ac5f84ae6be566c","impliedFormat":99},{"version":"ced7ef0f2429676d335307ad64116cd2cc727bb0ce29a070bb2992e675a8991e","impliedFormat":99},{"version":"0b73db1447d976759731255d45c5a6feff3d59b7856a1c4da057ab8ccf46dc84","impliedFormat":99},{"version":"3fc6f405e56a678370e4feb7a38afd909f77eb2e26fe153cdaea0fb3c42fbbee","impliedFormat":99},{"version":"2762ed7b9ceb45268b0a8023fd96f02df88f5eb2ad56851cbb3da110fd35fdb5","impliedFormat":99},{"version":"9c20802909ca00f79936c66d8315a5f7f2355d343359a1e51b521ec7a8cfa8bf","impliedFormat":99},{"version":"31ddfdf751c96959c458220cd417454b260ff5e88f66dddc33236343156eb22c","impliedFormat":99},{"version":"ec0339cf070b4dedf708aaed26b8da900a86b3396b30a4777afcd76e69462448","impliedFormat":99},{"version":"067eed0758f3e99f0b1cfe5e3948aa371cbb0f48a26db8c911772e50a9cc9283","impliedFormat":99},{"version":"7dfb9316cfbf2124903d9bc3721d6c19afbf5109dfbc2017ca8ae758f85178ab","impliedFormat":99},{"version":"919a7135fa54057cf42c8cd52165bf938baeb6df316b438bbf4d97f3174ff532","impliedFormat":99},{"version":"4a2957dfe878c8b49acb18299dfba2f72b8bf7a265b793916c0479b3d636b23b","impliedFormat":99},{"version":"fad6a11a73a787168630bf5276f8e8525ab56f897a6a0bf0d3795550201e9df5","impliedFormat":99},{"version":"0cc8d34354ec904617af9f1d569c29b90915634c06d61e7e74b74de26c9379d2","impliedFormat":99},{"version":"529b225f4de49eed08f5a8e5c0b3030699980a8ea130298ff9dfa385a99c2a76","impliedFormat":99},{"version":"77bb50ea87284de10139d000837e5cce037405ac2b699707e3f8766454a8c884","impliedFormat":99},{"version":"95c33ceea3574b974d7a2007fed54992c16b68472b25b426336ef9813e2e96e8","impliedFormat":99},{"version":"1ecb3c690b1bfdc8ea6aaa565415802e5c9012ec616a1d9fb6a2dbd15de7b9dc","impliedFormat":99},{"version":"57fc10e689d39484d5ae38b7fc5632c173d2d9f6f90196fc6a81d6087187ed03","impliedFormat":99},{"version":"f1fb180503fecd5b10428a872f284cc6de52053d4f81f53f7ec2df1c9760d0c0","impliedFormat":99},{"version":"d30d4de63fc781a5b9d8431a4b217cd8ca866d6dc7959c2ce8b7561d57a7213f","impliedFormat":99},{"version":"765896b848b82522a72b7f1837342f613d7c7d46e24752344e790d1f5b02810b","impliedFormat":99},{"version":"ee032efc2dd5c686680f097a676b8031726396a7a2083a4b0b0499b0d32a2aea","impliedFormat":99},{"version":"b76c65680c3160e6b92f5f32bc2e35bca72fedb854195126b26144fd191cd696","impliedFormat":99},{"version":"13e9a215593478bd90e44c1a494caf3c2079c426d5ad8023928261bfc4271c72","impliedFormat":99},{"version":"3e27476a10a715506f9bb196c9c8699a8fe952199233c5af428d801fdda56761","impliedFormat":99},{"version":"dbb9ad48b056876e59a7da5e1552c730b7fa27d59fcd5bf27fd7decc9d823bb8","impliedFormat":99},{"version":"4bd72a99a4273c273201ca6d1e4c77415d10aa24274089b7246d3d0e0084ca06","impliedFormat":99},{"version":"7ae03c4abb0c2d04f81d193895241b40355ae605ec16132c1f339c69552627c1","impliedFormat":99},{"version":"650eddf2807994621e8ca331a29cc5d4a093f5f7ff2f588c3bb7016d3fe4ae6a","impliedFormat":99},{"version":"615834ad3e9e9fe6505d8f657e1de837404a7366e35127fcb20e93e9a0fb1370","impliedFormat":99},{"version":"c3661daba5576b4255a3b157e46884151319d8a270ec37ca8f353c3546b12e9b","impliedFormat":99},{"version":"de4abffb7f7ba4fffbd5986f1fe1d9c73339793e9ac8175176f0d70d4e2c26d2","impliedFormat":99},{"version":"211513b39f80376a8428623bb4d11a8f7ef9cd5aa9adce243200698b84ce4dfb","impliedFormat":99},{"version":"9e8d2591367f2773368f9803f62273eb44ef34dd7dfdaa62ff2f671f30ee1165","impliedFormat":99},{"version":"0f3cef820a473cd90e8c4bdf43be376c7becfda2847174320add08d6a04b5e6e","impliedFormat":99},{"version":"20eed68bc1619806d1a8c501163873b760514b04fcf6a7d185c5595ff5baef65","impliedFormat":99},{"version":"620ef28641765cc6701be0d10d537b61868e6f54c9db153ae64d28187b51dbc0","impliedFormat":99},{"version":"341c8114357c0ec0b17a2a1a99aecbfc6bc0393df49ea6a66193d1e7a691b437","impliedFormat":99},{"version":"b01fe782d4c8efc30ab8f55fae1328898ad88a3b2362ba4daac2059bd30ef903","impliedFormat":99},{"version":"f8e8b33983efa33e28e045b68347341fc77f64821b7aabaac456d17b1781e5f4","impliedFormat":99},{"version":"8d3e416906fb559b9e4ad8b4c4a5f54aeadeb48702e4d0367ffba27483a2e822","impliedFormat":99},{"version":"47db572e8e1c12a37c9ac6bd7e3c88b38e169e3d7fd58cb8fb4a978651e3b121","impliedFormat":99},{"version":"a83a8785713569da150cded8e22c8c14b98b8802eb56167db5734157e23ee804","impliedFormat":99},{"version":"cce1c8b93d1e5ed8dcbaca2c4d346abb34da5c14fa51a1c2e5f93a31c214d8e9","impliedFormat":99},{"version":"213a867daad9eba39f37f264e72e7f2faa0bda9095837de58ab276046d61d97c","impliedFormat":99},{"version":"e1c2ba2ca44e3977d3a79d529940706cef16c9fdd9fd9cad836022643edff84f","impliedFormat":99},{"version":"d63bfe03c3113d5e5b6fcef0bed9cd905e391d523a222caa6d537e767f4e0127","impliedFormat":99},{"version":"4f0a99cb58b887865ae5eed873a34f24032b9a8d390aa27c11982e82f0560b0f","impliedFormat":99},{"version":"3c8a75636dc5639ebd8b0d9b27e5f99cdbc4e52df7f8144bc30e530a90310bbe","impliedFormat":99},{"version":"831ec85d8b9ce9460069612cb8ac6c1407ce45ccaa610a8ae53fe6398f4c1ffd","impliedFormat":99},{"version":"84a15a4f985193d563288b201cb1297f3b2e69cf24042e3f47ad14894bd38e74","impliedFormat":99},{"version":"ea9357f6a359e393d26d83d46f709bc9932a59da732e2c59ea0a46c7db70a8d2","impliedFormat":99},{"version":"2b26c09c593fea6a92facd6475954d4fba0bcc62fe7862849f0cc6073d2c6916","impliedFormat":99},{"version":"b56425afeb034738f443847132bcdec0653b89091e5ea836707338175e5cf014","impliedFormat":99},{"version":"7b3019addc0fd289ab1d174d00854502642f26bec1ae4dadd10ca04db0803a30","impliedFormat":99},{"version":"77883003a85bcfe75dc97d4bd07bd68f8603853d5aad11614c1c57a1204aaf03","impliedFormat":99},{"version":"a69755456ad2d38956b1e54b824556195497fbbb438052c9da5cce5a763a9148","impliedFormat":99},{"version":"c4ea7a4734875037bb04c39e9d9a34701b37784b2e83549b340c01e1851e9fca","impliedFormat":99},{"version":"bba563452954b858d18cc5de0aa8a343b70d58ec0369788b2ffd4c97aa8a8bd1","impliedFormat":99},{"version":"48dd38c566f454246dd0a335309bce001ab25a46be2b44b1988f580d576ae3b5","impliedFormat":99},{"version":"0362f8eccf01deee1ada6f9d899cf83e935970431d6b204a0a450b8a425f8143","impliedFormat":99},{"version":"942c02023b0411836b6d404fc290583309df4c50c0c3a5771051be8ecd832e8d","impliedFormat":99},{"version":"181655e54e8b288d671457be112383e6c51502cff5c4e39020c89f281a987307","impliedFormat":99},{"version":"27d7f5784622ac15e5f56c5d0be9aeefe069ed4855e36cc399c12f31818c40d4","impliedFormat":99},{"version":"0e5e37c5ee7966a03954ddcfc7b11c3faed715ee714a7d7b3f6aaf64173c9ac7","impliedFormat":99},{"version":"adcfd9aaf644eca652b521a4ebac738636c38e28826845dcd2e0dac2130ef539","impliedFormat":99},{"version":"fecc64892b1779fb8ee2f78682f7b4a981a10ed19868108d772bd5807c7fec4f","impliedFormat":99},{"version":"a68eb05fb9bfda476d616b68c2c37776e71cba95406d193b91e71a3369f2bbe7","impliedFormat":99},{"version":"0adf5fa16fe3c677bb0923bde787b4e7e1eb23bcc7b83f89d48d65a6eb563699","impliedFormat":99},{"version":"bf4a06264e6b80cc96fa5e6f11b05825126845563efbf5a68a5b18fddee833b1","impliedFormat":99},{"version":"560a6b3a1e8401fe5e947676dabca8bb337fa115dfd292e96a86f3561274a56d","impliedFormat":99},{"version":"b2e451d7958fb4e559df8470e78cbabd17bcebdf694c3ac05440b00ae685aadb","impliedFormat":1},{"version":"435b214f224e0bd2daa15376b7663fd6f5cb0e2bb3a4042672d6396686f7967b","impliedFormat":99},{"version":"5ac787a4a245d99203a12f93f1004db507735a7f3f16f3bc41d21997ccf54256","impliedFormat":99},{"version":"767a9d1487a4a83e6dbe19a56310706b92a77dc0e6c400aa288f48891c8af8d3","impliedFormat":99},{"version":"198f2246a78930833c24db9c42da7ab40c084c2e2132a899f9c03dcbe59d207d","impliedFormat":99},{"version":"eb07eea29499b56357f7593fbdbc6d2312d8afc32c14396952db8d897ea0c4c2","impliedFormat":99},{"version":"06efe54b5ceaa113fbc649424419746efde6dcd5af2a7d4472efb62d751801b3","impliedFormat":99},{"version":"39613fd5250b0e6b48f03d2c994f0135c55d64060c6a0486ecfd6344d4a90a7f","impliedFormat":99},{"version":"8dfbc0d30d20c17f8a9a4487ca14ca8fab6b7d6e0432378ba50cc689d4c07a73","impliedFormat":99},{"version":"4b91040a9b0a06d098defafb39f7e6794789d39c6be0cfd95d73dd3635ca7961","impliedFormat":99},{"version":"66b67d15116c453abd384a1ec73ad2cb90b19fff4c08289360c4f3f573465838","impliedFormat":99},{"version":"5805f6ee9c3a5369ba7f37a809e226f0b217d2059d6f699cc242c9907671143f","impliedFormat":99},{"version":"2f0578c52f2b95a2a2187ad6d1d8fa4e835278871c81747c500bf04bbe0301a2","impliedFormat":99},{"version":"ee9811c1b947c37077408d66bf61ca0f7e6ffad850ecec1e246e643c51fbb5e3","impliedFormat":99},{"version":"4e919bdf4100bc0338598352ad2778d4750fb0d5facbd1bc7c5210340a1f756d","impliedFormat":99},{"version":"4b54813a405270d710da2c598f57cc0c512aad7b5f34f8d2e109862020568a58","impliedFormat":99},{"version":"ac29a9fe4dc4829c7f3f693c7667483f9903ead6ac67abf8d6a5744a5578a7a4","impliedFormat":99},{"version":"5429b7f938113b40fa315e0f100220a5801992497bc3eb05e3b395055033a93c","impliedFormat":99},{"version":"aac828f821e824489c3f10a5452e05b7abc084894dcf6cef1855fe44c88d8556","impliedFormat":99},{"version":"9dda93662ba9cc072a048ed9717df4869820cdc84ebd33db3db6e1ef354f521a","impliedFormat":99},{"version":"a769f4df15ce86d72fdc646ef33bf9ad634e2d7f544399ca030b61d61c781942","impliedFormat":99},{"version":"e1848b9ea5d00c149eae78db2141cb099cd5cd0573064c03f24fada82b2a0d94","impliedFormat":99},{"version":"535dc92c4a20901f7dad384f1fd2b19735bb33720fad67283f4c2b06c4735777","impliedFormat":99},{"version":"695dbe57a9f1686b727ff8112def7376b69da4a9f92a6b4660cfc7adfeb4fd57","impliedFormat":99},{"version":"e30accdbef6f904f20354b6f598d7f2f7ff29094fc5410c33f63b29b4832172a","impliedFormat":1},{"version":"5fd2267cea69c19286f0e90a9ba78c0e19c3782ab2580bfc2f5678c5326fb78a","impliedFormat":1},{"version":"2a628d887712c299dd78731d2e18e5d456ac03fb258b8e39f61b2478b02481ee","impliedFormat":1},{"version":"b1e5f3a55aa219247976db1b0c6af31d07673e8085197aef925f25ca08fe12c4","impliedFormat":1},{"version":"e9f80c5934982b97886eadab6684c073344a588d1758b12fba2d0184e6f450a2","impliedFormat":99},{"version":"c609560ed4b5a840f9515229fdf7522440cfacaf2b6f21e1c3e6b46bfc4431c6","impliedFormat":99},{"version":"43980aaf3d50729108658c84a9325fb3341186024247f2af90a9114206577d06","impliedFormat":99},{"version":"a59b6920d3cd9ac94aa10df1c8f2aa9c76c91d73e4af0e745821424e73bbffc8","impliedFormat":99},{"version":"26de2510ef97324e48304cad246786f786be6b9d067746ba672724fe99eb4a76","impliedFormat":99},{"version":"a822bb869dd9dfdb4b1b5c887b90373d5a1e900191772646b6211541a5ea13b8","impliedFormat":99},{"version":"ba56cf294acda8f40e97bdf8f102617b57c914664476e1f900db307ad0e8c3f2","impliedFormat":99},{"version":"92be2c8229c02b140324d56906af58882ffd87ead115a34380580e9dedea4a18","impliedFormat":99},{"version":"a507cef707a17f4f58b0f106ed3bf5fb044a9cab3f7c24eaeed10e1fdbab6151","impliedFormat":99},{"version":"a14cb49589c589d4e1257bf7bb457548785b619d37e245fe2a6c1b942156584b","impliedFormat":99},{"version":"272f5f51201ffbd79dbb3533503dd3e20d7f8d1040ad42f33068bf9d0b163e7d","impliedFormat":99},{"version":"85a6e5140a3bf1abbba9e6184d732d25648d20007116cbf39bd3baa9312441f2","impliedFormat":99},{"version":"bb9e472d55badebf8969025cc126eb857874252c58795ee5c6e74d686700ed21","impliedFormat":99},{"version":"7be935d17f4f54e3263e1526bae0128ebd6b15835e6c22116a44d8e0ada5a74b","impliedFormat":99},{"version":"b4aece44eaa3781d058e4f0790aa4a4e1d2012a1d62c73ad05e6a5737a7ee293","impliedFormat":99},{"version":"8519f682ce37f2d021cd6072049a7ac2db5fdef449afa3a2a226d346c25d5962","impliedFormat":99},{"version":"a43478ba83037f64bb87ea8471a7e8a407efa910a75540b384593bcce2d38c48","impliedFormat":99},{"version":"9bc917d7e01d56dfae1f76108a8cad4957f961cb51aa23c5d2e69ef3db286e20","impliedFormat":99},{"version":"b0fc879036b6a62cc7cbd27ea444f6fbe57fbef1b1d039b0d566df2117ffb499","impliedFormat":99},{"version":"69b3e0b9435c37d191bce1a4d38c8d18e8add8cb99835eab8f566b95ad9de828","impliedFormat":99},{"version":"3c1183883c83dbb1be210210e1c11a878f87d60f8afc1b3972cc6388c87e7971","impliedFormat":99},{"version":"3c1183883c83dbb1be210210e1c11a878f87d60f8afc1b3972cc6388c87e7971","impliedFormat":99},{"version":"0b4125a4b9bc524a75e880a6f31849624262d8c97cde4a5da1d34256c95f5bfe","impliedFormat":99},{"version":"0c95bbcf76de3e231a4288d81d9e897e10c73da899277da633b44a08eb8eefba","impliedFormat":99},{"version":"d0ca01ffa779f381a0ec9d9efe34ea3cc98b45e4056ab44b5268766d63aab647","impliedFormat":99},{"version":"b5738f6245eee46675619b44f6af0d70f7586be229fb360532a80c44b1b49ff9","impliedFormat":99},{"version":"517171e44831ae1b5c34ba7aa7c7f1dcb21902c31d3f7b2abb51e497a0b99e6f","impliedFormat":99},{"version":"e2e3cde2cec99e82ea98a82c5bd92ed12e4fea8cf402a6e035d5bd2a7cca281a","impliedFormat":99},{"version":"9382e32237e08424b2642d1d9ea4af3a76001cef48888273f769af0c95cf169b","impliedFormat":99},{"version":"45a95142d20916e8510b2d4c42b09aaa3d8ca3d0c3dbd7f915da870ad182380c","impliedFormat":99},{"version":"2131b5fbfbb47e80581e06e8bd11c7bfefcda71f088aa5f1d137d289c20a2222","impliedFormat":99},{"version":"c0c57f6c7ed346d12352f55865e539621bdcad36045d2b9e71be0e168b1192aa","impliedFormat":99},{"version":"11fd3ff2c4379a9f482f0d7c8591fd679d4f8dcab82046db3a1812f8713f2373","impliedFormat":99},{"version":"36f2ab77365fd65ee3261475892dba15c0fe452077a93a19a63aaf2acb62fc98","impliedFormat":99},{"version":"bb9cd6cc3af0b5e3ffa70cb1de85fe6946b3a3f1f10ebed7ed8c772f7ae50466","impliedFormat":99},{"version":"5b3a8b45bba54d7ef198eefa8c61eed06ec95d267108353c1517742be9eecb88","impliedFormat":99},{"version":"8081faa1962486c7e9e5fc2dff88fae24d868c5a585cdb2c38ba1c15fce4deae","impliedFormat":99},{"version":"9f57322db1a5da7c827f95f23fc860c2296730373a87436ad2ee23644c3c86a3","impliedFormat":99},{"version":"1ee555a004b7194196d6d51cf73227cfc1c0f0d043da9a649e5e867a25d1a2fc","impliedFormat":99},{"version":"1d6201fba84d7d56be10c34ef4f816988da4bfd1548902300f3e031a4f482833","impliedFormat":99},{"version":"51e530ae5cf54f398bee91699fa140199f96f2f55b8fa23901815b02c9721fde","impliedFormat":99},{"version":"18cc29fdaa42892eb79f03b9f00bd4619a35bb6dbc1805a7c5f94d9b0e96bf6a","impliedFormat":99},{"version":"b00e3cca08af70a9cad820cfc0c78e477d67b3f72d5f2d6ca967172e3a971f8b","impliedFormat":99},{"version":"9151c2db5ef596dc764093003dc730d6d3d1f75eaf5fa117f6caa2474e98a634","impliedFormat":99},{"version":"827f0158dcf51b4afd0bf7867d30ac9436535fb4422b891a16b88799f9caa6e8","impliedFormat":99},{"version":"a178ef7d260e3ae2d4bb5ef46000ac0ad00c79a454a80b1e03615ae4e410596a","impliedFormat":99},{"version":"6e477dd31a5483cbab13f1f907b29474b33a5140dd4e8672a7ebe00aa27984cf","impliedFormat":99},{"version":"b5873d1c47eff986c60cb5d61878fc2734a8c3e8cc64b7e183fbcdae3676aec8","impliedFormat":99},{"version":"3d1354d536d8ea970fca6ea675d5932b2d5720ac458fa85afcdd80f3b708c763","impliedFormat":99},{"version":"a06839234f46aa66759cd492ce3f716a9f32fc30d9310e1b7618c1f5cc075a62","impliedFormat":99},{"version":"92929866d4c2be4b9510afc8ce088817d8a2f5b58398cc032aa3e587fb700a42","impliedFormat":99},{"version":"6483a445bd97d8cc1545cebe5b4b84e7611c5f2ac65adf4fba8188e1758cb1b1","impliedFormat":99},{"version":"513d0b8895a905e579ed2baebdc817a23dae16e78ecd925400e3142a8096f33e","impliedFormat":99},{"version":"d8ef707d006fdf8e64a9ea3673c4748374cac72d794b632dd6868e7973de3b55","impliedFormat":99},"780807f8c8cdf68e8d646043b476ab5e2b4fa0f0f87dffe2007db40a770f6d50","1559f7dcafbe461f88574162b5c133c7443a2543088e50842348ccc11049dfaf","7688bba0d1cce772a26874fb87ad985fa2a488ab711b789563919194aa33b4da","2778747ec5f0fa749a66df42831ea70270ab3a17a94f1313e01905b794f92a47","4a8f3f92baec87162d727caa562595aa6a14d9c126f62283bd5b17fe594d6a2d","d3bb8603a9ce30438913b8acb12952915acb82bf8bcc2af304f4a858f36887ad","c7db7712217e9d79ce5f0993f6664ff5f61bf2b5990c93c8d1a09de51fbcc361",{"version":"5276ee82ef96770571bd5aae9f4f5cdd474c3d4c1a068f1e1d9ab9cf16529975","impliedFormat":1},{"version":"cdb1d174036ebdb04b5a61461ff523efaeefffd87b093f43fdf20196024b2003","impliedFormat":1},{"version":"23c2c70dd974c3b8b66be4f3d6c9351fd41235d9c038b4d57d334dda8f753819","impliedFormat":1},{"version":"dffa09d0911ebb2639cae47397e011cc195de4a3ad83b53efb2651cfa0e0b75e","impliedFormat":1},{"version":"7d2c1ce36b9370a3af266ca6c663fe62e82671f9cf41337bda0efd837a5e2de9","impliedFormat":1},{"version":"6e45f5dd809aca05301c8e1b9f526096fe89b3369da10fe34f9c037832f103a9","impliedFormat":1},{"version":"0db63cf288cd71a85b06be8065db706797fb7d368a2315bd34967070c880facc","impliedFormat":1},{"version":"755ee0128a813468af08c5e673655a068813c92f4179978fd37ac3df1688c2f8","impliedFormat":1},{"version":"f183da4c889c90d5060aacc1c247c6cd68cc0024b9891402bb1c07a492d18018","impliedFormat":1},{"version":"da1c8718353e2981fa5981328a2d5cf6bc70da59c51967924d032a06177bce50","impliedFormat":1},{"version":"cba87731af3b8e51151ab6b3ba2d9604739649cf132885dff49836d5369ae387","impliedFormat":1},{"version":"3965bb091883ba173f7742c16ec8efe81207d75774d3a809385edce6841adca0","impliedFormat":1},{"version":"108fd0cab464e528dfa511d982368df2c9d9964e1e66f8921ef40accce9dfcf7","impliedFormat":1},{"version":"8d48c98fca3f013fd2872810d7168a9c405c4037962637aaa0a094571e731757","impliedFormat":1},{"version":"9898a7c6ed78c9656079244ea2318282f42ffd1cb5d4aa5753decaa7f3eaafa2","impliedFormat":1},{"version":"6c91dc4348c8e9fd3623bb47b5435d0a7f34467ef4130c72394d15eb076d5e79","signature":"8e4ef7f11e844396ec1dab547d5236a02a5e49fbb1ec65016537ff5676df17be"},"de5c24590448a0399aa7cf3057217387b277f4664c602028531ed60758394287","95ccade4cb1378910811207172141620038bee6a72e0aac8703203a4fa9ee2b1","28b3666039f660adb329975264b4e2ceeffa0dd061155e72da33d773f0e57c30","4f5239569ea92e174986b8cc746afb6d3bd469d9f87d28119997c7ed207c36ed",{"version":"b4f89206c8e318e5e65294ae7925a52a5bc13508809c5c699d7ebfa14e0509eb","affectsGlobalScope":true,"impliedFormat":1},{"version":"d51500cee65d776a8591b72c1019b0dada25d6f7ea39685130ccedad2e8b1eff","impliedFormat":1},{"version":"e733b8a7d2ecce20916d95d75a0c7cdfff7e8371879006902d77969da1550d65","impliedFormat":1},{"version":"d9d5884c0b7a87c6b0b319474eac7987f915f7460a04012d54689c14c800d69c","impliedFormat":1},{"version":"42739f43f21108aaa8b2e9d1246c537c88fc193694d5c3660b49ab5ed87bec60","impliedFormat":1},{"version":"8c4c212cbe640024a5076e006d5ed48c6856bf3a79880c52d0fe453495b84e7d","impliedFormat":1},{"version":"8dbd432facc1bfd211d58bbbf86a405dd55cdf04d6425037171282ae5e1bd5ae","impliedFormat":1},{"version":"bd0ae662720de3f141b078c64de498113fb13faec0c1cbec62f1630f7b8954a3","impliedFormat":1},{"version":"517fee0f998ca443a8eedaed7ad143753cd7ed6c9fc97a62200c09b21ea661d7","impliedFormat":1},{"version":"e94e5a0936bba407a0d0b7846ff8a7960667f09040b575b5035bc30298510781","impliedFormat":1},{"version":"f6a3229a9d452117bfc85b50e955b836c8c91b1244dd8d3413c2824333022982","impliedFormat":1},{"version":"f7a32e6a301921e58c28b8cb944134cd447d4db8b5b85d0e614abc90a333080c","impliedFormat":1},{"version":"28732171a9e5a176e9d8b9bb417b32dc885591bc2642232389a44167bc5ec581","impliedFormat":1},{"version":"90ebe8ddee75b7e87baf030d45d49e13a91dea47fa4cd8494ac85e5ea35779c8","impliedFormat":1},{"version":"6ec1d690b2213c008b55d31778e6c4f13141487fe26749ee6a0b4c2b6f84f9c9","impliedFormat":1},{"version":"43ae0b1b0a836f113aa973b1a4d114e2867fd320125e43a80805d9a80ab07c4b","impliedFormat":1},{"version":"1b6d1aeb6a58db9a9702623d7edaa31eda44cb33fe66f349f6156b20db8b6211","impliedFormat":1},{"version":"5ee542acb0e360c539bcf027de4389536fdaae8653e47b33eb0445ba85bf223a","impliedFormat":1},{"version":"8a0a53613cfa756a769e4514632acac0e17d80631af21a888daa46ac01ccdd1d","impliedFormat":1},{"version":"e7f9e4cf51627c95fdddff062c58c6b1c4e22d1868acbf3e7e663ee95e3790b8","impliedFormat":1},{"version":"449d082b398ad2a53c5def35397b752d61c968a2acacffb935d564b5ff3aa19c","impliedFormat":1},{"version":"1a3aa0fb5f9a2dc05a33faa6246f85ecc52c8af7a5257d8639e724a12ebc92bf","impliedFormat":1},{"version":"6480e9b0877e389c96e3b89c43fb2e4d84bb6ae8cea22f8ea2bf30ac4a4c4136","impliedFormat":1},{"version":"9cd1a75410c01f48f43befd40b47a7d2d42565b5593d5cf02b7472b04a1d98c8","impliedFormat":1},{"version":"d0144e7240c7f26030468a13211194d192316099ebbcee7782c6005cc393c734","impliedFormat":1},{"version":"095a402135de9fbfda29ba7c984bf54b9e65757396b4165706d898e9baa83ed5","impliedFormat":99},{"version":"0b6471168629b8a0cbac9f8f67bbbba83a1d64cf1424cd7d299439b3af88129a","impliedFormat":99},{"version":"3e0fa3b04086663fd406499ea37f0714b0d7cbc296eb81e244f2bf0ba4938bb2","impliedFormat":99},{"version":"3d11abe325e68a5b76d9f53ecc0b4ea29685ccbd8690b279f2177e0750d87f8c","impliedFormat":99},{"version":"f1952d24cb1344241341230924197977764249edcde80605e96454f073ebb35a","impliedFormat":99},{"version":"3b5b37b56d81802168c5b8df2f1d4a7ee018d67e7463f221d49b6ea20af00060","impliedFormat":99},{"version":"f3a6db8faeb959400a4d0e1100b9d5c54eb494800e6dc9a2452bb2e00a27397c","impliedFormat":99},{"version":"d278699a1c7e06a195ecc065c4965d1bbfb5bc2d67176e63bebf58b273158023","impliedFormat":99},{"version":"261ffd2f7502d9387324715c7dcb9f3a30c8d044b6dc3abc7ff80737c366476c","impliedFormat":99},{"version":"28729ff7b2ea98a9ba6ca4490c5540be744a4d73b4199ff6094cb65c9db33607","impliedFormat":99},{"version":"6ac889647435812fb7ced7035daf90c1f307710056e4b496a3fd5cb97c87daed","impliedFormat":99},{"version":"29f60d17027d6bc8891797f6ed95ac84ee42313e6b03ddb49beff6f22f49f8c6","impliedFormat":99},{"version":"f71579228be8825267577e970c8f0ee2869cebae0bb7603b00644fec924c6717","impliedFormat":99},{"version":"e50f096cb424b63343ad5814622623f15cf3830f41710376bebb3c7f71554713","impliedFormat":99},{"version":"69ebae4354b59ff1ba38419d6033e22d0db6ffe6c1d562e78914f88f06ec517f","impliedFormat":99},{"version":"45f0aee62dc187cbde99b10987e1f8649a30bba8bf9c95957e37d1551d0626da","impliedFormat":99},{"version":"919b048385b82efca27e5adec2f61f17a2b219582f2deb8a13b4648c7c8fafbf","impliedFormat":99},{"version":"47747eabb3c64620a12f707bf30c7f7a211e25754a2da1f98267068f49bd0947","impliedFormat":99},{"version":"2dc1bcd6a132924a89f965b60edd5b5333aaa7eb28ba5af44a0a0a328756e9ad","impliedFormat":1},{"version":"ad117b97b2eb65daeeabf0adb13573a8f1d12d5ce21c312eb7eb588106b92560","impliedFormat":1},{"version":"683f7d52795b5e2c0a269c4a202f212d147eee850b6d74050af619cea7638605","impliedFormat":1},{"version":"bf338c88f9e91b1700029f806a2d8bb447f19d3e39fa57dbba16ce8bf43902c2","impliedFormat":1},{"version":"d3c9c7df6fe4c7905f73578af2542e2f303da2b0565abb10ccf8a75626da1bb5","impliedFormat":1},{"version":"a16c041923053317f99708de244e50f0c563de0ee22313739810b67cec8af89a","impliedFormat":1},{"version":"b64880a77efc0fba08ee595d277a52e7abbdef2dde51a163376f03d6d3a67c7a","impliedFormat":1},{"version":"817d7ba9b41a1f3f7d15e8c1067bc32ce0044aab0ba05e2794294ed25959cdf7","impliedFormat":1},{"version":"6e6d52eece8b335d10a436ca59f91cbf0727f9f2ac0521a0b0ffc32da2006948","impliedFormat":1},{"version":"98e70d3105aa56ac3e2a34a78f10c6d352ff9e3148b1bc2bb11c1787f0176d26","impliedFormat":1},{"version":"144ffc9e0632f167247b8ebc6c12b690555b27930cb2d92edceea7df51e54bbe","impliedFormat":1},{"version":"cb6b2bd587f4d8b0299840be7cedf422fb895d3c7f6cbd8c18c041518ba82fee","impliedFormat":1},{"version":"849b51d422f1a846684da755840ffe68f65701b7b7703ea9622847df65dfb2cb","impliedFormat":1},{"version":"3b17eebfd6fea2320c3d3ab55e26bee41e6745fe51432da7901e898249a8c186","impliedFormat":1},{"version":"5d9c054ecd5fad83e0ec5e117196acdcd4b1cc5b8d28f5df752a416c27052aa2","impliedFormat":1},{"version":"949c8eb79434b05b6d1c10d2010216fbd6c920ee376d08627f717d24b6572454","impliedFormat":1},{"version":"25495d26470692e2591e386c1dbffe4aa0b2d8c00af6ac9c8c69657818262dd5","impliedFormat":1},{"version":"abee0197420ed0849c7adbff50fc13f54ccb52f9a8c906e298c28321bf736cd9","impliedFormat":1},{"version":"3af7286265437a7488193d0ab0b56a6e20e1a5e08831a6c3fe0880212c2c6c75","impliedFormat":1},{"version":"d7eadcb936edf325912a70d1c4874c29b92463ba1eecdb302858763db6a68692","impliedFormat":1},{"version":"04fe6e4f5bd35c234cd04ea88ada66b718aec4b3edf611147b0ec9ea216b3cd7","impliedFormat":1},{"version":"7aa826d09dcfa85af6b2cfeeb6a7f340d417968632695fa8eacf4186fb71e8ac","impliedFormat":1},{"version":"ebbf2bf006f21fc203f1a555ff0fdcd8542d1546d7cab60aa835ff5902db0d2d","impliedFormat":1},{"version":"12aaf4e3c85225c710acd6a9f41532bf8e06bf180e54c1bedc60fa9b9c1a7d23","impliedFormat":1},{"version":"7814f653054116409bc9a36968b77c878c2013ef8d8873328e8f6fcd3348d8d9","impliedFormat":1},{"version":"ff4ade9606d1b3fe1a10bdf6ab944e1bb1d5ac86035228ddd3ecb5fbe51d4d47","impliedFormat":99},{"version":"608ffc65e122c3eeeff832a9007ecc00fe71bf1b03a3069a44e8c565ee8af368","impliedFormat":99},{"version":"40b54b241bc79a986a5ac364f7f11c60af8c68ac8d45c80501ed31af7e587a74","impliedFormat":1},{"version":"0d1a503605c35a53f49ff2b6506704b289bc33d9001d2244044c91fc82315c8a","impliedFormat":1},{"version":"96d1d70759af66ea4404f7c18130ef478e5052de8863e2bf4467cfbc2fc7176a","impliedFormat":1},{"version":"d0476ddaacf1b8b9b18aa7cdb54eb8bc7edb69165a455803e2065fc28a321960","impliedFormat":1},{"version":"9332e2b6255fd361167671093522351ad5e2d0e3a78d9bf8f0959d779f6d3246","impliedFormat":1},{"version":"5be2e2b5ca39c4fc74b0273674a3e7705088513872fa3de1e4f75357a507a988","impliedFormat":1},{"version":"fc8bef71b44a15c1c6afe97e2ce74c7beb10d0a3c45d19dca5b9d53cf81cc744","impliedFormat":1},{"version":"41dd7695c5e11ca31e40bb8d9a2edc9c2b3e262d1007fc7471ecb91516874d98","impliedFormat":1},{"version":"262efb4650083ac514f3119534d502211d0270140057698e7d4978caaf4b6f97","impliedFormat":1},{"version":"b5e98f1f4e64ace252ae743df592ff0187aac817efaf58cd97c63e243fe15951","impliedFormat":1},{"version":"151f53de4563905919248ae634d857276a8491e62416b6f2cccbfebfe6794a72","impliedFormat":1},"83e392127f71627fce9a8e0ce30fd22c043db537c93d8731101b138c38fbea04","59d65621a16b1bff32e7a8b07fc677b0cceab8d73c5ebbc0f23a405d5fe63686","752f6b591f1efbb939af28c2e5c33ed607dd554df8711c0a469fb9dc0b59c5f5","a6e0b5559a7189298206415308a4a1f1bd13b5f5ed91da861cee12cab2f641f4","1b4dda36948afd6a509a29f86633a7a538a79211aae9e3e09fe24d3d6dc65a97","1036b4ff3d86ef2764256afd871b34a8546244586f00a93646aed983167dcd22","181dab36aef859f6e4aa54e1b0e755866866228cbbe5455522779dcc99648dc4","b2e1f4d7e311fcbd8998f5a631ea9c77601967f8976c4ca626a1b05ebf3efaa7","31bcdb1016481b1fff0668d003946e34ce93fd86e80777c56026d7d1987305c0","ca28e21dec32859f280a5efcc5392c626582d4017c0b36a8265c9ff581b3617c","246d7397668a7ddf2858967263ed8aeaee0e7ba4f0ec063d639aeffbab6ed81a","d1726a0ddc24aea9e851a8ce56684a29f58aaa37a41d7f3840cbdba69043db99","3eb40afdc378b50a96a2ae67116adbd1c163600481f7d182d46e5a3bf3a8cc25","3c3c17f0acbd71abbd94c109027b0c0274a6bc9aee0fabe5b9d48463ea69d87b","296273d01ad5a060d70f600fa110abc2545b9bc707fcdbeeecc85c4e9cda7509","1ff3822feead679faad5ae04acc6b7a08df0c44e3077e45566b2c4df19df28c3","3a02674c3a48813e03c2fd5ae7fd6307fb6c5bd772065a5cf7ce56633d284a35","e3ee5daefb9a226bf3097abcf3b628db556ccebd9641a7ee0609547d98c851db","203ac3e8a0db9e5eb975c9cbbe5905c7fcc0b1907c4c1e13ae1eb2899ab00055","48d88d2c46c6da424c84808ff7b0df53b716cfee2b8cdead2f491602cfa76796","f2391323b20c3ff6cdc785f9d7e6ec7d515843857f4f2edf4470f4899b91cc5e","f973ea7a19526aa0096d2799105e6d65030be2dc9baf5497c67a1e8355530f50","e4890347e9bcae005176bdde5d04078511f7f0102f856b1ae9d6467622895fca","b59e268333810a6ed4d17e2b490ece89d2db6cef01236b84526bb8248be2aac9","a2fd6350ef2a8ab815957ccdeaa328e0ca6bffbd2b82c6c1fa1b319b0b883a2c",{"version":"5276ee82ef96770571bd5aae9f4f5cdd474c3d4c1a068f1e1d9ab9cf16529975","impliedFormat":1},{"version":"cdb1d174036ebdb04b5a61461ff523efaeefffd87b093f43fdf20196024b2003","impliedFormat":1},{"version":"23c2c70dd974c3b8b66be4f3d6c9351fd41235d9c038b4d57d334dda8f753819","impliedFormat":1},{"version":"dffa09d0911ebb2639cae47397e011cc195de4a3ad83b53efb2651cfa0e0b75e","impliedFormat":1},{"version":"26168183003371ceac063f0cdf62be889d0515a193444a99b176094565dabb0a","impliedFormat":1},{"version":"7fc99221160c51281d2b9095552be2b24b600b3b6fe305cfd068bf501f623ef2","impliedFormat":1},{"version":"0db63cf288cd71a85b06be8065db706797fb7d368a2315bd34967070c880facc","impliedFormat":1},{"version":"755ee0128a813468af08c5e673655a068813c92f4179978fd37ac3df1688c2f8","impliedFormat":1},{"version":"f183da4c889c90d5060aacc1c247c6cd68cc0024b9891402bb1c07a492d18018","impliedFormat":1},{"version":"da1c8718353e2981fa5981328a2d5cf6bc70da59c51967924d032a06177bce50","impliedFormat":1},{"version":"747f48fa4633d85211b7e6afefcbba37b7adf816b171a569105db23ce6009286","impliedFormat":1},{"version":"3965bb091883ba173f7742c16ec8efe81207d75774d3a809385edce6841adca0","impliedFormat":1},{"version":"c1eb69b3ec8f1080980c25c8244c4ba093af729f4dac451758e69026b20c50a7","impliedFormat":1},{"version":"f67870591872110fd6a97ec0d933972f21ccf433bfb9d8ed1f044740958c4e43","impliedFormat":1},"a849f7a91ecba56e6ecacc20a383a825aa6cf5b2842e75a3fa9348f06d71295e","858794e17e92e99c7257ce08c98ad806be9123f7c1fea852f2f899a0508aece7",{"version":"a28e6fadb0b6e7a95cfcd29366f2b72a8e3193270d3f2b673e1876edf0159c7b","impliedFormat":99},"5494ffbcdd6e45046d78e3001b4da0b472dcaf9e6681d1bf84e99c0b206a9861","837c40e7e259b78104bdda5a8fd589b19a753fb7f77c8c316baad18bce444fba",{"version":"9891b4e49d435c7ac14fb3cc769e97077bbd946100c952df08eda117c3b5b68d","impliedFormat":99},{"version":"9be0dc6f4c5ebff5d838dc0d059f25e5a6ab1d224d5adc7ef46887ce8549e897","impliedFormat":99},{"version":"32aa20fd978847e617304582657723f0dcd1809de9b087ed0ad5b7090b1a47c1","impliedFormat":99},{"version":"1f37db92ea78f4d197a201f80a3c52ce6e2b759b19d3a1e9de5aab0c9026fe3f","impliedFormat":99},{"version":"c07898a85c15b3b636506443e88fe6d85bbd568c0bb504a9ae5cb371d58f6319","impliedFormat":99},{"version":"2d45f7ff55036e74513af142af1f414924ad337cc00e612bb37bb55473c70b30","impliedFormat":99},{"version":"3a6b10911970b0588c5a287642e4c6be91c16b96407a499c6dc81a96daf1085a","impliedFormat":99},{"version":"795d467a57e3a7c4aa3d645fa2edae9a2d0d44dde435bd1b222ab533da6fce44","impliedFormat":99},{"version":"bfc5aa7977557874fcbe1e96f7a06e46b3b568b955c82b74a85cc8f6c62060a5","impliedFormat":99},{"version":"f20bb3ae0de20cd6a4b73155cb506bae39e904b7e5ea4f618f5bda7b3ae474fc","impliedFormat":99},{"version":"44c5d9f47e85552ea141ddc1b0af65903297624f0ff2227372d5ce31ff0380c6","impliedFormat":99},"8790b28796d1f491f3268564d782ebe2879829ead0c10d9aab60c2e9d3588d6f",{"version":"c0a4aac782cdc312e796608b467bd8fe8c8202b0fdbce29eb83d1f439f2a09cc","impliedFormat":1},{"version":"c7a397d655099caf70ef4b64ba4fb3c672d810d7c1e46fda7f1ae500131ec248","impliedFormat":1},{"version":"cbe4de475b5492a3fc5443dc2c75c08d054f83d459c06d4e1a82722223fd0fcd","impliedFormat":1},"45ea1eb14968f6bc1c7a77cffc1a5f762a7069668732cd2bd5cf143d96a10d88",{"version":"a896cee6bbf43009c05e9ee4b0cfb1147ae49a4ffc2d814c6d7465806d76fe72","impliedFormat":99},{"version":"6bd987ccf12886137d96b81e48f65a7a6fa940085753c4e212c91f51555f13e5","impliedFormat":1},"a9b4d5ebf62da6decff3d9ba91a354f1f84e4b672160bfe672219d719a6c9735","e6be08931c776916434a0240aea01e097d7c8ab0278ca22c535f9564d99755c7","3bf7074d9fe7a42890f98df09734c059560bee1acd58eeeb45ef749c6590ea72","2f9ac707504adc40be90c966bf6941ca32749c9cff11269ceb74ebce549998fc","760b600c4664aa4cbff56d74e9b168e77d62eb11637f9df97ed4898e6fd0bc7d","2ecea95b433caa7cb7693c720f23e62f076b13c5e46ba8c6bc5ac4a597c2c09b","4b248dbaf94ed07ca827344205498cd6a199486ca4ed481c6823ce4a2a58f101","204f71fd5637e5eaf2acabf1ba5a674077eb97e5920f67ddb43bab804b3bfdb5","1c190c54c58a41ed84b31f88cf7737ffddb2449fa474b154dcf5fb5684667c0c","113d200d8709d86af1e1c17057bc2a59faa494d31fe3aba5d3e472a11196cd66","e5179def8be76cf5e1e4045132bb5bc23bd5bbca339ce159fdcb6a6eced7acf9","cfc919572f1ed08c7f16b22096d3dead757f805e00e1eab0f8d2f2e6a454aa76","93fa6d6206af8ef1708c47eacc1e3315561f7df227c30dcdf22613de15d8dcb8","fdb2f04ac4847fba15176be0465a64b67ae3d16140a62d472516f0024fe576b4","5e074078d297d407f935b084436a66161fe67af6150e64356457a64830a48926","fb78e606dc1da5d66f1d47782c50f29f5f1fb73938572cdc5df442ee3528fb1c","de98eeddf3ed100c9fc5146dbb11932f0234b74b1c8dae05f64dcb766bd2b1b8","648e905763c70a88cdeb815bd4a162250027c2bbd4c17e5f831f0f12c273798e","0f3e97babf73961349e942e4c41f7419163afe93e043ab7cd304cbd492e0f39a","ef5f13cf96aeddd3100b42f791205e602f551c2106eadbab7a72fc8fec1ee543","d1ce233383060afc1db856828610052df70105dff680d55eea0c9a7f82d39bc5","36953fe9fee3721c62cfafe0b87327d606205da9d2f2a3e41abdc9c3ddba7d54","df884a193d2e819aa76f4e57a6c0ef72612663d1e9b37a1de0027c8c11fbf216","3d4cef432d7e96fa18c66c90a6161fc79e3982ac09c6dccb5a1c237b81320591","f34d529d782257ccc87df267226d63b6ebfc985cd5af510a9d4ee3ae8bd14cca","05086b2bdd1ee47459168c8f63a2daa5742ce31567dad416da219f936b4bdfeb","8f72bdd08e7a4c15c7cb3baa6ad7972bb0daef797dc3dda0f2d2122a93a5c786","908a50708098d91ea15a6ad201583246a6ae804572fab4d6096a8ce2bd84801d","f6b4a321f86474cb40c946d6de4cd8c861e983fc266d6a9edad68ffc526da908","35823beef0e23c5e19c2398d9f602d8fe2a3156e4163e62acfdf7d2d0950e48f","e2a2b24f612af140c8d6b59baa23af4df49a95d319d046086bb1e24d1deffa32","b2634ebe505bd7463a3e751f6a27e37074bddaf44fef83514faccb664ac76a13","3463099173871b687dd02764d17d631e92cc63e7cbddd3e8eaa21fd927988901","2c93f90a183e5127f21611e92334bbb85182ce24048054e1d7b148d42e157241","c82b628a7676ad99c15ae7b32bb6e70f8effc59ff56ea5044b7d573c280cf5ce","664fd6bf7cbf4e641f172c6877b41dbc500e606ae01f3917300264ed5f0f55ce","837678e6e5a58f269855ec23e6a2dc16ad61daa89be3793696a550e4ff62739a","a0ead136f7e2ff0de9c31f2bee24dc00988f7789f32a5a648bd365656a9da740","c4bf9ae7d77fbc75fbd333d92e8b5927b33063b64d8a526ee3fae74cd1cc6482","cda56df36d3c1eed4aa985131088cc86268e77fa310c8c939171c2c841e4fbec","cf993bb90feda2f1608bcef93eebd0e834b20a846e85be66fbe61a5646f473b2","433a718101638b14bd7d628d853940bf49c9e73fd649f6bed45d38b08c1a33d8","a5548aa326ca898c07eaf189bd38955265983bfd334838e741f53d473c61a510","7b433aaf72fe38be0c239f9090c8e211352b376ce169567fd935ff31395f9f49","bf9daf2670c8b49fe9e7435d48b1a74215cdfb8a01e2c0d6bbe46d83abf9f31c","69b15103a5bd95b62c4f7c4dc23e1b516766a206f38c8a132bbb70e07c79439b","ec685be78af113fc87ec6998f7ea72d31b6250440bc1763c6279f8b33ff40ae6","16401c0faac33cfc2b628a1cbcc1664559e1c4bb3a085a8538142bb28f8f0e7e","e8da0541d9cc6e6dbf7b8be36c653a109c40310de8d3054e56f55a1609bb119f","f8c32fd18a406cd29fa0ccf06d887ed0c19d5162ef2a3d3129c1dab3ef553ced","abab797abf6b9380a2083d4b164baa04570735d7faf51b5164064cd6e93694f3","d72b48d15417b240c392315dcf497a2beca0c1fdc09d155a3727659a6916fadb","e29318092a9d32cd2b0164102cb746052331b6d7f855f457ca11c0385339b11e","25ebca34c1077f3a29919061e3ac807c17c0fdddc9050b1b8d2bde585c827866","519ffd06ea1dac7802692b811edec2a93b18700f7c940ce65de3bb2235702a1d","2ee58ec4f3f11c32edd3499867198be5f4ad7022f8480369067687547f7ef75b","e8da0541d9cc6e6dbf7b8be36c653a109c40310de8d3054e56f55a1609bb119f","af123751fef26c39cb168362d699b48c419c8c8ad7ec5503c90f6bbce554b467","ed36faa2344c5c40ad5794972657f29d487b68fe0662145a5093a3cd018e15b3","ac9b3c53465714855f732448dc69f0dc56fb108dbe8c2e3e92c723e2a78db039","690a5a024c85d7af9c4bc5167cba52f0ec38cebfa6b0f02a4231fe19713c353a","d7804b8341e5a42c044455c766b13098e3e3e03ae11b2ad9b3f3806bcbab3b29","3b6704a38e51fc05dbe9ea78361e0d31bffbe4a602edf08563593b75556f8040","0a714f89f0a6189d342941717d0ff3a0fb57dcab179216fd59f5017c00cbe46e","690a5a024c85d7af9c4bc5167cba52f0ec38cebfa6b0f02a4231fe19713c353a","373a74a89570f59c6a418b5e7f31ba11ad1ff0546e36c1bce4cc14bd0c45ee3f","eba3e941058c78550eb515df949f97ea94df504d0f5665783994605e4bc59c96","1d1ff9197037131b99ffc2c4c5dbbaf1868985b02c5f97196723663c9042ecd1","690a5a024c85d7af9c4bc5167cba52f0ec38cebfa6b0f02a4231fe19713c353a","74dd0f04dc885d4d6e8d93023de5585ff3f3514eb45cc8d7208e8d35864c4102","7843ad58cd87b4f05b763ee2529d5033b4976ce382035ad56940e5421333a881","bf3d8eb0bc84896bd718e16ffd3242ab613b5038ccc6911138a9f176d009f3ba","690a5a024c85d7af9c4bc5167cba52f0ec38cebfa6b0f02a4231fe19713c353a","5cbc2158ab882ffc7cee918a4615273b034bddff06981b2ea0159985a2bfc0e8","e32875bed8e71e5d0f768f568cef2b369ec6fa377e8d6c2bd7c16d159c446e3e","d48b15b88a44803dff86441a47c28527ec6776ff5f9f5174925416ebd48d7243","690a5a024c85d7af9c4bc5167cba52f0ec38cebfa6b0f02a4231fe19713c353a","fb2d94450ecefa5d5aafdddbaead3be7851f60ee640ca767fd157420de107031","2a7560b1cb6d4f91f826c91296116707afe3844e700a6913e754ab1a1666eab2","72f66686356db0a28a50ef2cdc8f3090fd19b8af99a38e694a784890bbf2fc46","690a5a024c85d7af9c4bc5167cba52f0ec38cebfa6b0f02a4231fe19713c353a","c974216dd887bd740070ab6149cdf1d229681128db0e3b3e63c5831b6e5a297b","e420e515c767af879783c06b721ed56b8def324c94986c3c68dd298a242c0109","04bc9e2aa8ba0e24cd1ac0412e04f7eda620e79c2568c7d7a563a1d6469cf3d6","690a5a024c85d7af9c4bc5167cba52f0ec38cebfa6b0f02a4231fe19713c353a","9cbbeadba97307031520e54afe9d97adb96f07978b5b9355af803b4f0fd9fa14","a5296dc92dd530b36527e0b9e0d8d64098387d58fbfd9b75bc615173710bfb22","50af9f05c8c14400e2e654db0de71b8a3dcbe9a056f7f59b98f355a9c77a7c56","6a63d80e2bcbeb94b2bfc8e8785798c52241197c48907df714a5bbbfc546ab7d","2a7560b1cb6d4f91f826c91296116707afe3844e700a6913e754ab1a1666eab2","f3568b78c51c0eaa6208e18a24d5f932db096214a4a047e16e2952fa6aac3e20","690a5a024c85d7af9c4bc5167cba52f0ec38cebfa6b0f02a4231fe19713c353a","f023f56bf192bb8d3a10e656cdd365d0ac9d36024dc91dee1dc8886a5927420c","abdfa3e09d37d63db9d2f4a01578c283cf3ef67af44b69f0f171b2fffb70654b","61a9872e2f7a0aa6b4a21f036bd1202257c4a3ac248c8cbdab3d7ab5e8c24530","690a5a024c85d7af9c4bc5167cba52f0ec38cebfa6b0f02a4231fe19713c353a","fbb5158d60ac1917beb99b62f514d9781276677987ed0112d7240b64bc88468b","2a7560b1cb6d4f91f826c91296116707afe3844e700a6913e754ab1a1666eab2","11e43cb7483636b4b594e4c695ff2eeea74c83518e8bc4acc8874a0395c97c48","690a5a024c85d7af9c4bc5167cba52f0ec38cebfa6b0f02a4231fe19713c353a","6ba4e40c79a235f49c43533e0c3ecc39b5f3e5c94d3e6a340aef1c1948c8cca4","e7fae19caafb8b41e2ce6705a725f30baddaa2523137595a50f4098a00250353","6c1971b1ef9a8b843015e680052166e122c0fbe49a3cf8ffb357dbac6ef0f6ce","6d0015106f628b262842e5206987321769071c2cadf3cb99bd142db2e75aabb5","409bd5c7699db706e9b176afcda3f03a7ec0fc85257544d7184ed887e15fbacb","36418dd9b4281991aa6b096f123a77bb4bb9b8d6564427813980b561fc056140","52abfe012e6f3751811a6a95c31656f073d7cba4c614b693d6dd661f743dd538","9cecd2093208086c1486c2765418e4aa090620a0d6ff193c5a537c81387eebf6","bb409549eff0557c51f60fd5ba3409560ec39f06800cd9e2a29de22a02d89712","3b802579ce8e09cb8fe1e9b9be6b73df3c37b7a951666caf650203cb0e9bb209","8daa5329562a959761c1c35e995dda6367b904bc631939db199f5b9fc2419137","0e3995e174ad08a98e91c411249d15e2b6aed4cf3b1438b39dd84f3bacde83c3","3ac37ece13e9bab69da5166baa4272affdc771469c7d28271e6c47e07f48ab4c","91106a5b9be3398e71729f182a13432bf7ce9e0554527015e4e818dda2c3e9bb","32695b2ac8527912097a5205f2564dde19cd7343de9a3f78b43a489add053d96","f180cdcbfd6c52fab93742caadb7b16d871fe925d8bd49f1e23fcaaa26c85387","32aaeb25b9b7e9c067c1ab26e99dd48f8cad3945b3f5eff231cbe6860c6b7a50","f8592a4dc96fd879fa0dccbb7498b66d489e06c767aad8f25ec7f7b16698be19","b060c231e45cf2b6d8f689b31e8b09823d2b0976b9105124b9ef4da433f56528","ba94d3c66259d075b5e2bba753ac18545f8c37afa836c3dcde2a75f5d61c6a91","d85532cafe5203f0c43984aa52bc1689b250e6a03c7ea93b2d1cd86d6ca7e2b2","777e70b20f712c12efa1725c0a96eda237733bf2fc020dfd98f31dee2b670c5b","8175b911625c67a01cf345e7dc0a03517191a85c5dbdc9ef6306241551dbffcd","450cbfba9e6e5eb96accb26c6c75a31d0f018a6eda0dd9a407778123ba045eaf","2a6c5a33ac04e9578bab2495d168f2482c78037a144a1d18c09ab55aad797b4e","f33bb080cac8ff5d2f4a5cf60ef91706f236254ae0b868008bea767c74f5a7b4","76908abefb913859b0d5aa6a55e0ea01270a21ad02399bec95e9df092902b124","d20cbef7830eb4e327bf0e3693940ed8fc53bdf3e7166a90ff60b7fcd2acdee0","9f310cf1cfb1c765fda6e6e5768aa6c7fca1243b994a5ca997759181590981ec","54fb69757912848ef5be2332c7e6a520d2cb8eeddf07ca128a0497f5c43b9363","bd25366208b91d6bafe0041c1d58443c247a68710d8a614f47f565b7798f45dc",{"version":"541d70899d3b0b5d83c239712934e05b497c9b4c1076155a2890bb85a8aee0ea","signature":"746ca263b34f4de9818ba0d40d9c45f73475bc168d0360e99b5b33323dad149b"},"61b9c114b3e0787363a01a0213e46d8d0c779136e9f0aeedf4046074c6fbbf87","b2c76981efbe8b4fb6b88e7e0d451a9ac3498cea786689d4a0cfcc1aceb0ba1d","9cad936e014102ec314530df983168a713d6661eade3cc9b2e8aacfd0d18d6ee","2d95a52272da8ca2ec37da0ad7ddd089227e97dca9e9e0464b2d2be43fa572d9","67f4ad1ade1c7c1a1b177a84332b36b3d604e9a39d8a7fd8e3b7706bc278ea06","315897e1062e00b74e70c51864b685a36389d96bdafe19d297b6208dddefc740","aad5cd8b3800ef80a0bd9fbf309bf0fef607aab8555352ac11150e5a9a8ba4aa","bd6a585ecb6eb73fc29256c6ef8b100e4bb47e28aeb38473f820a7b63e4da52b","0bfed83ae9c9c74bbb020467548eaf51afe75cb72eba1cc83ba45049b34e2607","9b2884a3729baeeb3708ff8a6edc53378713cbac697fa061035618cdc8845a95","da1ebb8a528155c78e9b278daaab1bb609fff3e8c6477add4bdb698b015358f6","2207ee1ef5d66c035d9245dbd0e1f09da53e13151252e1ad4892beb4301726ee","28469d0d6d7825f55da5a0daa6fff57b5b5be551ffd119352992632a13f69ab9","a952c96a93b87fd33fb519f48d4ff50d30edbdff005e6c488453d837f528714a","d455a31c1e8b57a791b325d376a985b79aabf9bd954f8b974909e087408cd3db","4ba2afb0338a9116a5e7fb0c22af19098a4c7261a0555cd8fd05c93ae0cba2f2","e23076b177e7f44d35c37c9645fa286efb8e155e298aeffd555bcbec9dd148c4","af2c52be7b6ea33fc0a9cc62e9e1709b4a6c3d82522c08f58df28e2ca82680ce","0c285f87cd0f498d364b27cc2ff54a36fdee9091a0f13a00e587313341415cc4","9e1f168fc16f07964cced00315dc5127d4de5ac744b698eac660af137418495d","0b5b656d443c1e8fdff0d18a6337712ce51101d869f841523abfdca018f3d65b","f002d86a49dfd48d8b6eb7f8c817e201f0d8bc95329c7d379914c8d66b047f32","5fe8cba90fd05514a212949ccf3023eb89815d3623eee04dac3556258ef9267c","b2b02f2f2c6dcfe8f71590005cafcaa6d6b80bcf0771c0f004c6e4d7b5b84402","5c00a2bcc6e3c6fd241864a4673644e13b975d46959b6653f489c493e2a66562","8e08ad059dc1d5c4b0c6ca3f40bf5820ed51a9af0ab5519f9c1d800a2968619f","d948ec6d0b9107601583e3ae3af2359519e0c2f1da78905154e1877c6ca4770f","bc0f0db364583c7cfeeed5a28499fbdbf691035183dfc39859fc31e689d1db21",{"version":"52f5c39e78a90c1d8ed7db18f39d890b2e8464a3f44d4233617893f6648e317d","impliedFormat":1},{"version":"19726a169a4000cba269c284b97043faa0593de45865c43553c233f6825af0fb","impliedFormat":1},"6d4738306a2f9d923a9641ecce3991e64eb11cc3bdd742bbef72cf929e00c77f","365c25418c596a0ce608713cf26954f79c3a772b894a33bb92553092626a7c89","4982aa30c44f2e60ead9dbb4cf161061ec0111b0fd5c382e1b7aadf07695bdd0","5144645ae774a6e01de125a35dfbf23fc59c648560a64d017718d7ba41fcc7eb","b1c6d98fb75890683d578a2b78e3b0d71f0c47f08debf355253cee18185ab248","27e71a2bc50062a65a09c235470415f30daf22f50a725e4cb1f483fc3f3caf1e","12ef08f711049716cb22a4f1e77a331f49b640134d9c19289690addacd83d766","5d5a30193ac10062960d2679da9e34adbe589aad7c4c80bb2e5380d7cdeb105d","84e4a43313428b2723f1316caa759144c5e2601784416c51d31ab4e77bcc25fb","aed983a78fb2aa231cf118edc699b9cbe731b3c4e3f2023b829d196a24b621d7","493607ce396819ce844d8aa37267a4e2d41ab8fea4b15b6f2568a3aade4c7b45","eb7dc1aecc02de71340df9fe20e6d7ac37cdae03756892a872bc4a8b43a11f29","6418aa13b4f8bdfcd2635cfa609c7e598063ac2d7de516aac055fe13123d4967","9a330e8a3bc218cbfe22f7fa109c16b21c0b08af272d85c6c3fee2100b49d9c0","d7a967e4306c0ef742975cfc121736a576d45685db57e0544d16e2d7636cd0e3","d7f031fd8b8d7452d4e0944ded52e1b308c911d49a903171eedb4e6b1c43188c",{"version":"1b8e4993b0a8abdc8e98f9c11fe535f583dce84039b8402e6afab966c3f84501","affectsGlobalScope":true},{"version":"7c3f548ca157e70e5a54055ac71977acb07fc5e7b69e2041d3387b144fafa9cb","affectsGlobalScope":true},"360938ae1ab9ddfffe8fee6efe46572956c7e900adefb11d4c9995874def011c",{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c906fb15bd2aabc9ed1e3f44eb6a8661199d6c320b3aa196b826121552cb3695","impliedFormat":1},{"version":"22295e8103f1d6d8ea4b5d6211e43421fe4564e34d0dd8e09e520e452d89e659","impliedFormat":1},{"version":"f949f7f6c7802a338039cfc2156d1fe285cdd1e092c64437ebe15ae8edc854e0","impliedFormat":1},{"version":"6b4e081d55ac24fc8a4631d5dd77fe249fa25900abd7d046abb87d90e3b45645","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"83e63d6ccf8ec004a3bb6d58b9bb0104f60e002754b1e968024b320730cc5311","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"a3fc63c0d7b031693f665f5494412ba4b551fe644ededccc0ab5922401079c95","impliedFormat":1},{"version":"f27524f4bef4b6519c604bdb23bf4465bddcccbf3f003abb901acbd0d7404d99","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"6b039f55681caaf111d5eb84d292b9bee9e0131d0db1ad0871eef0964f533c73","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"c8d3e5a18ba35629954e48c4cc8f11dc88224650067a172685c736b27a34a4dc","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2b55d426ff2b9087485e52ac4bc7cfafe1dc420fc76dad926cd46526567c501a","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"47613031a5a31510831304405af561b0ffaedb734437c595256bb61a90f9311b","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"8a1a0d0a4a06a8d278947fcb66bf684f117bf147f89b06e50662d79a53be3e9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"9f663c2f91127ef7024e8ca4b3b4383ff2770e5f826696005de382282794b127","impliedFormat":1},{"version":"9f55299850d4f0921e79b6bf344b47c420ce0f507b9dcf593e532b09ea7eeea1","impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"ee70b8037ecdf0de6c04f35277f253663a536d7e38f1539d270e4e916d225a3f","affectsGlobalScope":true,"impliedFormat":1},{"version":"a660aa95476042d3fdcc1343cf6bb8fdf24772d31712b1db321c5a4dcc325434","impliedFormat":1},{"version":"035d0934d304483f07148427a5bd5b98ac265dae914a6b49749fe23fbd893ec7","impliedFormat":99},{"version":"e2ed5b81cbed3a511b21a18ab2539e79ac1f4bc1d1d28f8d35d8104caa3b429f","impliedFormat":99},{"version":"161c8e0690c46021506e32fda85956d785b70f309ae97011fd27374c065cac9b","affectsGlobalScope":true,"impliedFormat":1},{"version":"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","impliedFormat":1},{"version":"7965dc3c7648e2a7a586d11781cabb43d4859920716bc2fdc523da912b06570d","impliedFormat":1},{"version":"90c2bd9a3e72fe08b8fa5982e78cb8dc855a1157b26e11e37a793283c52bf64b","impliedFormat":1},{"version":"a8122fe390a2a987079e06c573b1471296114677923c1c094c24a53ddd7344a2","impliedFormat":1},{"version":"70c2cb19c0c42061a39351156653aa0cf5ba1ecdc8a07424dd38e3a1f1e3c7f4","impliedFormat":1},{"version":"a8fb10fd8c7bc7d9b8f546d4d186d1027f8a9002a639bec689b5000dab68e35c","impliedFormat":1},{"version":"c9b467ea59b86bd27714a879b9ad43c16f186012a26d0f7110b1322025ceaa83","impliedFormat":1},{"version":"57ea19c2e6ba094d8087c721bac30ff1c681081dbd8b167ac068590ef633e7a5","impliedFormat":1},{"version":"cba81ec9ae7bc31a4dc56f33c054131e037649d6b9a2cfa245124c67e23e4721","impliedFormat":1},{"version":"ad193f61ba708e01218496f093c23626aa3808c296844a99189be7108a9c8343","impliedFormat":1},{"version":"a0544b3c8b70b2f319a99ea380b55ab5394ede9188cdee452a5d0ce264f258b2","impliedFormat":1},{"version":"8c654c17c334c7c168c1c36e5336896dc2c892de940886c1639bebd9fc7b9be4","impliedFormat":1},{"version":"6a4da742485d5c2eb6bcb322ae96993999ffecbd5660b0219a5f5678d8225bb0","impliedFormat":1},{"version":"c65ca21d7002bdb431f9ab3c7a6e765a489aa5196e7e0ef00aed55b1294df599","impliedFormat":1},{"version":"c8fc655c2c4bafc155ceee01c84ab3d6c03192ced5d3f2de82e20f3d1bd7f9fa","impliedFormat":1},{"version":"be5a7ff3b47f7e553565e9483bdcadb0ca2040ac9e5ec7b81c7e115a81059882","impliedFormat":1},{"version":"1a93f36ecdb60a95e3a3621b561763e2952da81962fae217ab5441ac1d77ffc5","impliedFormat":1},{"version":"2a771d907aebf9391ac1f50e4ad37952943515eeea0dcc7e78aa08f508294668","impliedFormat":1},{"version":"0146fd6262c3fd3da51cb0254bb6b9a4e42931eb2f56329edd4c199cb9aaf804","impliedFormat":1},{"version":"183f480885db5caa5a8acb833c2be04f98056bdcc5fb29e969ff86e07efe57ab","impliedFormat":99},{"version":"4ec16d7a4e366c06a4573d299e15fe6207fc080f41beac5da06f4af33ea9761e","impliedFormat":1},{"version":"bf6402a3cfff440801c3ea5835f08784aac18087016534b48741adbcee931921","impliedFormat":1},{"version":"71b110829b8f5e7653352a132544ece2b9a10e93ba1c77453187673bd46f13ee","impliedFormat":1},{"version":"7c0ace9de3109ecdd8ad808dd40a052b82681786c66bb0bff6d848c1fc56a7c4","impliedFormat":1},{"version":"1223780c318ef42fd33ac772996335ed92d57cf7c0fc73178acab5e154971aab","impliedFormat":1},{"version":"0d04cbe88c8a25c2debd2eef03ec5674563e23ca9323fa82ede3577822653bd2","impliedFormat":1},{"version":"aaa70439f135c3fa0a34313de49e94cae3db954c8b8d6af0d56a46c998c2923f","impliedFormat":1},{"version":"4ace083580c1b77eb8ddf4ea915cde605af1a96e426c4c04b897feef1acdb534","impliedFormat":1},{"version":"daf07c1ca8ccfb21ad958833546a4f414c418fe096dcebdbb90b02e12aa5c3a2","impliedFormat":1},{"version":"89ac5224feeb2de76fc52fc2a91c5f6448a98dbe4e8d726ecb1730fa64cd2d30","impliedFormat":1},{"version":"7feb39ba69b3fc6d55faca4f91f06d77d15ffedd3931b0ef7740e8b6fd488b15","impliedFormat":1},{"version":"acf00cfabe8c4de18bea655754ea39c4d04140257556bbf283255b695d00e36f","impliedFormat":1},{"version":"39b70d5f131fcfdeba404ee63aba25f26d8376a73bacd8275fb5a9f06219ac77","impliedFormat":1},{"version":"cdae26c737cf4534eeec210e42eab2d5f0c3855240d8dde3be4aee9194e4e781","impliedFormat":1},{"version":"5aa0c50083d0d9a423a46afaef78c7f42420759cfa038ad40e8b9e6cafc38831","impliedFormat":1},{"version":"10d6a49a99a593678ba4ea6073d53d005adfc383df24a9e93f86bf47de6ed857","impliedFormat":1},{"version":"1b7ea32849a7982047c2e5d372300a4c92338683864c9ab0f5bbd1acadae83a3","impliedFormat":1},{"version":"224083e6fcec1d300229da3d1dafc678c642863996cbfed7290df20954435a55","impliedFormat":1},{"version":"4248ac3167b1a1ce199fda9307abc314b3132527aeb94ec30dbcfe4c6a417b1b","impliedFormat":1},{"version":"633cb8c2c51c550a63bda0e3dec0ad5fa1346d1682111917ad4bc7005d496d8c","impliedFormat":1},{"version":"ca055d26105248f745ea6259b4c498ebeed18c9b772e7f2b3a16f50226ff9078","impliedFormat":1},{"version":"ea6b2badb951d6dfa24bb7d7eb733327e5f9a15fc994d6dc1c54b2c7a83b6a0b","impliedFormat":1},{"version":"03fdf8dba650d830388b9985750d770dd435f95634717f41cea814863a9ac98b","impliedFormat":1},{"version":"6fd08e3ef1568cd0dc735c9015f6765e25143a4a0331d004a29c51b50eec402a","impliedFormat":1},{"version":"2e988cd4d24edac4936449630581c79686c8adac10357eb0cdb410c24f47c7f0","impliedFormat":1},{"version":"b813f62a37886ed986b0f6f8c5bf323b3fcae32c1952b71d75741e74ea9353cf","impliedFormat":1},{"version":"44a1a722038365972b1b52841e1132785bf5d75839dbc6cc1339f2d36f8507a1","impliedFormat":1},{"version":"83fe1053701101ac6d25364696fea50d2ceb2f81d1456bc11e682a20aaeac52e","impliedFormat":1},{"version":"4f228cb2089a5a135a1a8cefe612d5aebcef8258f7dbe3b7c4dad4e26a81ec08","impliedFormat":1},{"version":"7870becb94cbc11d2d01b77c4422589adcba4d8e59f726246d40cd0d129784d8","affectsGlobalScope":true,"impliedFormat":1},{"version":"f70b8328a15ca1d10b1436b691e134a49bc30dcf3183a69bfaa7ba77e1b78ecd","impliedFormat":1},{"version":"683b035f752e318d02e303894e767a1ac16ac4493baa2b593195d7976e6b7310","impliedFormat":99},{"version":"2be2227c3810dfd84e46674fd33b8d09a4a28ad9cb633ed536effd411665ea1e","impliedFormat":99},{"version":"e134052a6b1ded61693b4037f615dc72f14e2881e79c1ddbff6c514c8a516b05","impliedFormat":1},{"version":"957a44f864ab3c182edc747428e8eec1765257deee7fac86c1147eeac897d832","impliedFormat":1},{"version":"3feec212c0aeb91e5a6e62caaf9f128954590210f8c302910ea377c088f6b61a","impliedFormat":99},{"version":"bbdfaf7d9b20534c5df1e1b937a20f17ca049d603a2afe072983bf7aff2279f5","impliedFormat":99},{"version":"86d818ada2f5f0cfffca153af94205b67ba50f8e36524a413d66652f34ef19af","impliedFormat":99},{"version":"40afd49a15d0bafef682b42664ff21c274e02dcc60052f2df85dd53c70d9394f","impliedFormat":99},{"version":"5a5b1dd91662e93efae28d985e0e44d10f6a7e3c2c2ae8abc29bcfc406cb5310","impliedFormat":99},{"version":"66d0a61b3b0df6c9c2eb09dbe26e3c2aef71d9043fed17cd56de6669cb706325","impliedFormat":99},{"version":"f6692c3a1847d846bc4b7a690ef2ba096b2ca56bea5818f073eb8193ce33b5e1","impliedFormat":99},{"version":"1e4d27cf43aa16d164e958a220fee3c225b9dd146b1912cbc12083263f157ca9","impliedFormat":99},{"version":"a46147f499d4246998d1e44b43beecd2ee04c0a330c35863eaeccc827a737fdf","impliedFormat":1},{"version":"390140c96dcaf0831d24b5408d19af017e3a8f150fed140791d976ac20dd2da7","impliedFormat":99},{"version":"3181a53b0974a6fa4c6f8cf78cf2945248949467f1fc1d3ddb058b0efe6c4f00","impliedFormat":99},{"version":"13e7c1f8ddda39d034935e667f3a314ec8b89b8be18fbd4cd987ea4312b4221f","impliedFormat":99},{"version":"678307b1f5a25d7fb9b7307a7ccd8d146115b28f74315c48511d1e1fdf9f8166","impliedFormat":99},{"version":"ba6f2f79892f59ea9bf645e15ad70658fc76dfbbba32669c2957b7547210e6ff","impliedFormat":99},{"version":"768fd34f23de8dc5f5df6cd45f044bb4193105b5964e4ef734dbfc1a1f8e6223","impliedFormat":1},{"version":"376d229cb7d2f7a4d5fbfb2eb5df262c31385b0c314fffa6660ba7ea4a5937f1","impliedFormat":99},{"version":"0ebf97879a0c2914ab35ef84b5802a5acbc8b6a7fc3ad952c1f8bb568026e571","impliedFormat":99},{"version":"81d3389164d84254c3869f799509672d323d5027a9766c0fa4c22b12c9be6bc5","impliedFormat":99},{"version":"ca6cd2c9c706f1d84fe86e3f87e3aa779256ed9ca3a2adcca81931faab807683","impliedFormat":99},{"version":"cf76eeea2b4ec3fe26520cd129cfc32352d1ddb22b6d4ff0c6a709656a4b1b37","impliedFormat":1},{"version":"fea0cb28540b473977c722853998d39d28575fa12e31b3371fcf1f324e3a9fb7","impliedFormat":1},{"version":"ee4ee9bf6c6d276343e7f0bce3a5374800eb4ec6b2d7c70fab6ae3ef840d9777","impliedFormat":1},{"version":"571ba264349552a1111ac0d6a5ed580a41c390aac43a70546c3a7374c77faa71","impliedFormat":1},"4ad34258acf819cf5f356e000d833974ddb2c2d76f9d50e0783d316986782dd3"],"root":[93,111,[128,150],[1105,1118],[1414,1433],[1436,1448],[1523,1527],1529,[1544,1584],[1968,1974],[1990,1994],[2076,2100],2115,2116,2118,2119,2131,2135,[2138,2297],[2300,2318],2507],"options":{"allowImportingTsExtensions":true,"composite":true,"esModuleInterop":true,"jsx":1,"jsxImportSource":"vue","module":99,"noImplicitThis":true,"skipLibCheck":true,"strict":true,"target":99,"useDefineForClassFields":true,"verbatimModuleSyntax":true},"referencedMap":[[2316,1],[2315,2],[93,3],[105,4],[96,5],[95,6],[748,7],[742,6],[746,7],[745,8],[741,7],[740,6],[749,9],[747,8],[743,8],[744,8],[1119,10],[1120,10],[1121,10],[1122,10],[1123,10],[1124,10],[1125,10],[1126,10],[1127,10],[1128,10],[1129,10],[1130,10],[1131,10],[1132,10],[1133,10],[1134,10],[1135,10],[1136,10],[1137,10],[1138,10],[1139,10],[1140,10],[1141,10],[1142,10],[1143,10],[1144,10],[1145,10],[1146,10],[1147,10],[1148,10],[1149,10],[1150,10],[1151,10],[1152,10],[1153,10],[1154,10],[1155,10],[1156,10],[1157,10],[1158,10],[1159,10],[1160,10],[1161,10],[1162,10],[1163,10],[1164,10],[1165,10],[1166,10],[1167,10],[1168,10],[1169,10],[1170,10],[1171,10],[1172,10],[1173,10],[1174,10],[1175,10],[1176,10],[1177,10],[1178,10],[1179,10],[1180,10],[1181,10],[1182,10],[1183,10],[1184,10],[1185,10],[1186,10],[1187,10],[1188,10],[1189,10],[1190,10],[1191,10],[1192,10],[1193,10],[1194,10],[1195,10],[1196,10],[1197,10],[1198,10],[1199,10],[1200,10],[1201,10],[1202,10],[1203,10],[1204,10],[1205,10],[1206,10],[1207,10],[1208,10],[1209,10],[1210,10],[1211,10],[1212,10],[1213,10],[1214,10],[1215,10],[1216,10],[1217,10],[1218,10],[1219,10],[1220,10],[1221,10],[1222,10],[1223,10],[1224,10],[1225,10],[1226,10],[1227,10],[1228,10],[1229,10],[1230,10],[1231,10],[1232,10],[1233,10],[1234,10],[1235,10],[1236,10],[1237,10],[1238,10],[1239,10],[1240,10],[1241,10],[1242,10],[1243,10],[1244,10],[1245,10],[1246,10],[1247,10],[1248,10],[1249,10],[1250,10],[1251,10],[1252,10],[1253,10],[1254,10],[1255,10],[1256,10],[1257,10],[1258,10],[1259,10],[1260,10],[1412,11],[1261,10],[1262,10],[1263,10],[1264,10],[1265,10],[1266,10],[1267,10],[1268,10],[1269,10],[1270,10],[1271,10],[1272,10],[1273,10],[1274,10],[1275,10],[1276,10],[1277,10],[1278,10],[1279,10],[1280,10],[1281,10],[1282,10],[1283,10],[1284,10],[1285,10],[1286,10],[1287,10],[1288,10],[1289,10],[1290,10],[1291,10],[1292,10],[1293,10],[1294,10],[1295,10],[1296,10],[1297,10],[1298,10],[1299,10],[1300,10],[1301,10],[1302,10],[1303,10],[1304,10],[1305,10],[1306,10],[1307,10],[1308,10],[1309,10],[1310,10],[1311,10],[1312,10],[1313,10],[1314,10],[1315,10],[1316,10],[1317,10],[1318,10],[1319,10],[1320,10],[1321,10],[1322,10],[1323,10],[1324,10],[1325,10],[1326,10],[1327,10],[1328,10],[1329,10],[1330,10],[1331,10],[1332,10],[1333,10],[1334,10],[1335,10],[1336,10],[1337,10],[1338,10],[1339,10],[1340,10],[1341,10],[1342,10],[1343,10],[1344,10],[1345,10],[1346,10],[1347,10],[1348,10],[1349,10],[1350,10],[1351,10],[1352,10],[1353,10],[1354,10],[1355,10],[1356,10],[1357,10],[1358,10],[1359,10],[1360,10],[1361,10],[1362,10],[1363,10],[1364,10],[1365,10],[1366,10],[1367,10],[1368,10],[1369,10],[1370,10],[1371,10],[1372,10],[1373,10],[1374,10],[1375,10],[1376,10],[1377,10],[1378,10],[1379,10],[1380,10],[1381,10],[1382,10],[1383,10],[1384,10],[1385,10],[1386,10],[1387,10],[1388,10],[1389,10],[1390,10],[1391,10],[1392,10],[1393,10],[1394,10],[1395,10],[1396,10],[1397,10],[1398,10],[1399,10],[1400,10],[1401,10],[1402,10],[1403,10],[1404,10],[1405,10],[1406,10],[1407,10],[1408,10],[1409,10],[1410,10],[1411,10],[1413,12],[633,13],[635,14],[632,6],[634,6],[2136,10],[525,15],[521,16],[508,6],[524,17],[517,18],[515,19],[514,19],[513,18],[510,19],[511,18],[519,20],[512,19],[509,18],[516,19],[522,21],[523,22],[518,23],[520,19],[1989,24],[1988,25],[1985,26],[1984,27],[1975,6],[1976,6],[1978,28],[1977,6],[1987,29],[1979,27],[1980,30],[1983,31],[1981,6],[1982,27],[1986,6],[1611,24],[1585,10],[1586,32],[1587,10],[1588,10],[1589,33],[1967,34],[1610,6],[1608,35],[1607,6],[1941,36],[1940,37],[1939,6],[1923,38],[1922,10],[1925,39],[1926,40],[1924,41],[1928,42],[1927,6],[1931,43],[1932,44],[1930,43],[1929,6],[1961,45],[1960,10],[1933,10],[1963,46],[1943,47],[1942,10],[1934,6],[1936,48],[1935,6],[1938,49],[1937,41],[1945,10],[1959,50],[1958,51],[1957,10],[1944,10],[1948,10],[1952,52],[1950,53],[1951,10],[1949,10],[1947,54],[1946,6],[1954,55],[1953,6],[1956,56],[1955,10],[1909,6],[1965,57],[1964,10],[1966,58],[1918,59],[1917,60],[1916,61],[1919,62],[1920,63],[1915,64],[1921,65],[1962,6],[1914,66],[1913,67],[1910,6],[1911,68],[1912,69],[1797,70],[1732,71],[1733,72],[1734,73],[1735,74],[1736,75],[1737,76],[1738,77],[1739,78],[1740,79],[1741,80],[1742,81],[1743,82],[1744,83],[1745,84],[1746,85],[1747,86],[1787,87],[1748,88],[1749,89],[1750,90],[1751,91],[1752,92],[1753,93],[1754,94],[1755,95],[1756,96],[1757,97],[1758,98],[1759,99],[1760,100],[1761,101],[1762,102],[1763,103],[1764,104],[1765,105],[1766,106],[1767,107],[1768,108],[1769,109],[1770,110],[1771,111],[1772,112],[1773,113],[1774,114],[1775,115],[1776,116],[1777,117],[1778,118],[1779,119],[1780,120],[1781,121],[1782,122],[1783,123],[1784,124],[1785,125],[1786,126],[1796,127],[1721,6],[1727,128],[1729,129],[1731,130],[1788,131],[1789,130],[1790,130],[1791,132],[1795,133],[1792,130],[1793,130],[1794,130],[1798,134],[1799,135],[1800,136],[1801,136],[1802,137],[1803,136],[1804,136],[1805,138],[1806,136],[1807,139],[1808,139],[1809,139],[1810,140],[1811,139],[1812,141],[1813,136],[1814,139],[1815,137],[1816,140],[1817,136],[1818,136],[1819,137],[1820,140],[1821,140],[1822,137],[1823,136],[1824,142],[1825,143],[1826,137],[1827,137],[1828,139],[1829,136],[1830,136],[1831,137],[1832,136],[1849,144],[1833,136],[1834,135],[1835,135],[1836,135],[1837,139],[1838,139],[1839,140],[1840,140],[1841,137],[1842,135],[1843,135],[1844,145],[1845,146],[1846,136],[1847,135],[1848,147],[1885,148],[1723,70],[1855,149],[1850,150],[1851,150],[1852,150],[1853,151],[1854,152],[1726,153],[1725,153],[1730,142],[1856,154],[1724,70],[1860,155],[1857,156],[1858,156],[1859,157],[1861,135],[1728,158],[1862,139],[1863,140],[1864,6],[1865,6],[1866,6],[1867,6],[1868,6],[1869,6],[1884,159],[1870,6],[1871,6],[1872,6],[1873,6],[1874,6],[1875,6],[1876,6],[1877,6],[1878,6],[1879,6],[1880,6],[1881,6],[1882,6],[1883,6],[1887,160],[1888,161],[1889,162],[1893,160],[1894,163],[1895,164],[1719,165],[1718,166],[1722,167],[1720,168],[1890,169],[1891,170],[1892,171],[1896,172],[1902,173],[1897,10],[1898,10],[1899,174],[1900,175],[1901,174],[2114,176],[2111,177],[2110,178],[2101,6],[2102,6],[2104,179],[2103,6],[2113,180],[2105,178],[2106,181],[2109,182],[2107,6],[2108,178],[2112,6],[2423,6],[2038,6],[179,183],[180,183],[181,183],[182,183],[183,183],[184,183],[185,183],[186,183],[187,183],[188,183],[189,183],[190,183],[191,183],[192,183],[193,183],[194,183],[195,183],[196,183],[197,183],[198,183],[199,183],[200,183],[201,183],[202,183],[203,183],[204,183],[205,183],[206,183],[207,183],[208,183],[209,183],[210,183],[211,183],[212,183],[213,183],[214,183],[215,183],[216,183],[217,183],[218,183],[219,183],[220,183],[221,183],[222,183],[223,183],[224,183],[225,183],[226,183],[227,183],[228,183],[229,183],[230,183],[231,183],[232,183],[233,183],[234,183],[235,183],[236,183],[237,183],[238,183],[239,183],[240,183],[241,183],[242,183],[243,183],[244,183],[245,183],[246,183],[247,183],[248,183],[249,183],[250,183],[251,183],[252,183],[253,183],[254,183],[255,183],[256,183],[257,183],[258,183],[259,183],[260,183],[261,183],[262,183],[263,183],[264,183],[265,183],[266,183],[267,183],[268,183],[269,183],[270,183],[271,183],[272,183],[273,183],[274,183],[275,183],[483,184],[276,183],[277,183],[278,183],[279,183],[280,183],[281,183],[282,183],[283,183],[284,183],[285,183],[286,183],[287,183],[288,183],[289,183],[290,183],[291,183],[292,183],[293,183],[294,183],[295,183],[296,183],[297,183],[298,183],[299,183],[300,183],[301,183],[302,183],[303,183],[304,183],[305,183],[306,183],[307,183],[308,183],[309,183],[310,183],[311,183],[312,183],[313,183],[314,183],[315,183],[316,183],[317,183],[318,183],[319,183],[320,183],[321,183],[322,183],[323,183],[324,183],[325,183],[326,183],[327,183],[328,183],[329,183],[330,183],[331,183],[332,183],[333,183],[334,183],[335,183],[336,183],[337,183],[338,183],[339,183],[340,183],[341,183],[342,183],[343,183],[344,183],[345,183],[346,183],[347,183],[348,183],[349,183],[350,183],[351,183],[352,183],[353,183],[354,183],[355,183],[356,183],[357,183],[358,183],[359,183],[360,183],[361,183],[362,183],[363,183],[364,183],[365,183],[366,183],[367,183],[368,183],[369,183],[370,183],[371,183],[372,183],[373,183],[374,183],[375,183],[376,183],[377,183],[378,183],[379,183],[380,183],[381,183],[382,183],[383,183],[384,183],[385,183],[386,183],[387,183],[388,183],[389,183],[390,183],[391,183],[392,183],[393,183],[394,183],[395,183],[396,183],[397,183],[398,183],[399,183],[400,183],[401,183],[402,183],[403,183],[404,183],[405,183],[406,183],[407,183],[408,183],[409,183],[410,183],[411,183],[412,183],[413,183],[414,183],[415,183],[416,183],[417,183],[418,183],[419,183],[420,183],[421,183],[422,183],[423,183],[424,183],[425,183],[426,183],[427,183],[428,183],[429,183],[430,183],[431,183],[432,183],[433,183],[434,183],[435,183],[436,183],[437,183],[438,183],[439,183],[440,183],[441,183],[442,183],[443,183],[444,183],[445,183],[446,183],[447,183],[448,183],[449,183],[450,183],[451,183],[452,183],[453,183],[454,183],[455,183],[456,183],[457,183],[458,183],[459,183],[460,183],[461,183],[462,183],[463,183],[464,183],[465,183],[466,183],[467,183],[468,183],[469,183],[470,183],[471,183],[472,183],[473,183],[474,183],[475,183],[476,183],[477,183],[478,183],[479,183],[480,183],[481,183],[482,183],[116,185],[117,186],[115,187],[118,188],[119,189],[120,190],[121,191],[122,192],[123,193],[124,194],[125,195],[126,196],[127,197],[2369,198],[2370,198],[2371,199],[2324,200],[2372,201],[2373,202],[2374,203],[2319,6],[2322,204],[2320,6],[2321,6],[2375,205],[2376,206],[2377,207],[2378,208],[2379,209],[2380,210],[2381,210],[2382,211],[2383,212],[2384,213],[2385,214],[2325,6],[2323,6],[2386,215],[2387,216],[2388,217],[2422,218],[2389,219],[2390,6],[2391,220],[2392,221],[2393,222],[2394,223],[2395,224],[2396,225],[2397,226],[2398,227],[2399,228],[2400,228],[2401,229],[2402,6],[2403,230],[2404,231],[2406,232],[2405,233],[2407,234],[2408,235],[2409,236],[2410,237],[2411,238],[2412,239],[2413,240],[2414,241],[2415,242],[2416,243],[2417,244],[2418,245],[2419,246],[2326,6],[2327,6],[2328,6],[2366,247],[2367,6],[2368,6],[2420,248],[2421,249],[2504,250],[2064,251],[2063,251],[2488,252],[2485,253],[2487,254],[2486,255],[97,256],[98,257],[2483,258],[99,259],[100,260],[102,261],[94,6],[109,262],[108,10],[2042,263],[2056,264],[2057,265],[2058,266],[2062,267],[2043,268],[2069,269],[2070,270],[2061,271],[2047,272],[2051,273],[2041,274],[2049,275],[2050,276],[2048,271],[2046,274],[2044,277],[2060,278],[2045,279],[2066,280],[2067,281],[2065,282],[2040,283],[2059,6],[2071,284],[2073,285],[2074,286],[1999,6],[1997,6],[1998,3],[1995,6],[2072,6],[1996,6],[834,287],[833,6],[114,6],[101,6],[687,288],[686,289],[685,6],[1528,290],[2039,6],[2122,291],[2124,292],[2126,293],[2128,294],[1435,295],[2130,296],[2121,297],[2123,297],[2125,297],[1434,6],[2127,297],[2129,297],[2120,6],[503,298],[501,299],[502,300],[507,301],[504,302],[505,303],[506,304],[1062,305],[1060,10],[1061,306],[1058,307],[1059,308],[654,309],[652,310],[653,311],[661,312],[659,313],[657,314],[655,315],[656,316],[658,317],[660,318],[665,319],[662,10],[663,320],[664,321],[669,322],[666,302],[667,323],[668,324],[2132,3],[676,325],[672,326],[673,327],[670,302],[671,328],[674,328],[675,329],[683,330],[679,331],[680,332],[677,333],[678,331],[681,334],[682,335],[692,336],[684,302],[688,337],[689,338],[690,339],[691,340],[696,341],[693,302],[694,342],[695,343],[703,344],[699,302],[700,345],[697,302],[698,346],[701,345],[702,347],[710,348],[708,349],[709,350],[707,351],[706,352],[705,353],[704,354],[717,355],[714,356],[715,357],[716,358],[720,359],[718,360],[719,361],[727,362],[723,363],[724,364],[725,365],[721,366],[722,363],[726,367],[730,368],[728,369],[729,370],[739,371],[738,10],[737,372],[733,373],[734,374],[731,302],[732,375],[735,375],[736,376],[753,377],[751,378],[752,379],[750,380],[756,381],[754,382],[755,383],[784,384],[780,385],[781,386],[782,387],[783,388],[790,389],[786,10],[785,10],[787,10],[788,10],[789,10],[793,390],[791,391],[792,392],[807,393],[803,394],[802,395],[806,396],[805,397],[804,290],[811,398],[808,399],[810,400],[809,401],[815,402],[814,302],[812,403],[813,404],[765,405],[764,394],[760,302],[761,406],[762,407],[763,407],[2134,408],[818,409],[816,410],[817,411],[821,412],[819,413],[820,414],[828,415],[823,302],[824,10],[825,416],[822,417],[826,418],[827,419],[832,420],[829,302],[830,421],[831,422],[845,423],[841,424],[837,425],[840,426],[838,427],[839,428],[844,429],[842,430],[843,424],[836,431],[835,432],[848,433],[846,434],[847,435],[852,436],[850,437],[851,438],[854,439],[849,440],[853,441],[1095,442],[1079,443],[1078,10],[857,444],[855,445],[856,446],[861,447],[858,448],[859,449],[860,450],[539,451],[536,333],[537,452],[538,453],[768,454],[766,455],[767,456],[1084,457],[1083,458],[1081,459],[1082,458],[1080,460],[1071,461],[1068,462],[1069,463],[1070,464],[1067,6],[871,465],[869,466],[868,10],[866,10],[864,467],[865,468],[863,469],[867,302],[870,6],[862,470],[1087,471],[1085,472],[1086,473],[759,474],[758,475],[757,476],[1090,477],[1089,478],[1088,479],[873,480],[872,481],[2133,482],[876,483],[874,484],[875,485],[879,486],[878,10],[877,302],[882,487],[880,488],[881,489],[1094,490],[1093,10],[1091,491],[1092,492],[535,493],[532,494],[529,10],[526,495],[533,496],[534,497],[527,498],[528,499],[530,500],[531,501],[885,502],[883,503],[884,504],[893,505],[892,506],[888,507],[889,508],[890,509],[891,506],[886,510],[887,511],[896,512],[894,513],[895,514],[899,515],[897,516],[898,517],[903,518],[902,10],[900,519],[901,520],[910,521],[909,10],[904,522],[905,523],[907,524],[906,10],[908,525],[1066,526],[1065,527],[1064,528],[1063,6],[936,529],[925,530],[923,531],[911,6],[924,532],[926,533],[927,534],[935,535],[933,10],[929,302],[932,536],[928,537],[931,538],[934,539],[930,540],[941,541],[939,542],[940,543],[937,544],[938,545],[946,546],[945,547],[943,302],[944,548],[942,549],[950,550],[948,10],[947,481],[949,551],[1077,552],[1075,553],[1076,554],[1073,555],[1074,556],[1072,10],[953,557],[951,558],[952,559],[959,560],[956,561],[957,562],[954,563],[955,564],[958,6],[962,565],[960,566],[961,567],[995,568],[973,10],[975,569],[965,570],[972,4],[976,571],[986,572],[978,573],[980,574],[983,575],[987,576],[984,577],[985,578],[992,579],[991,580],[982,581],[989,582],[988,583],[970,584],[990,585],[963,6],[967,586],[977,587],[979,588],[981,569],[974,6],[994,589],[966,590],[969,591],[971,592],[968,593],[964,594],[993,595],[779,596],[770,597],[769,598],[773,599],[777,600],[774,601],[775,602],[776,603],[772,604],[778,605],[771,606],[1003,607],[998,608],[1000,609],[999,610],[1001,611],[997,612],[996,613],[1002,614],[713,615],[711,616],[712,617],[1006,618],[1004,333],[1005,619],[801,620],[796,621],[794,622],[799,623],[800,624],[797,338],[795,625],[798,626],[1009,627],[1007,628],[1008,629],[1014,630],[1011,631],[1012,632],[1010,302],[1013,633],[651,634],[650,635],[646,636],[645,637],[648,638],[649,639],[647,313],[1057,640],[1051,641],[1055,642],[1056,643],[1053,644],[1054,645],[1052,646],[1019,647],[1017,648],[1016,649],[1015,650],[1018,651],[1031,652],[1030,653],[1029,654],[1036,655],[1035,656],[1034,657],[1032,658],[1033,659],[1028,660],[1026,661],[1024,662],[1023,663],[1021,664],[1027,6],[1020,665],[1022,666],[1025,667],[1047,668],[1037,669],[1046,10],[1041,670],[1040,671],[1045,672],[1044,673],[1043,674],[1042,675],[1038,676],[1039,677],[922,678],[920,679],[921,680],[915,681],[916,549],[912,549],[913,6],[918,682],[919,681],[914,683],[1050,684],[1048,685],[1049,686],[167,6],[172,6],[168,6],[169,6],[173,6],[174,687],[170,6],[171,6],[1096,688],[1097,10],[1102,689],[1101,690],[1098,10],[1099,10],[644,691],[643,10],[540,10],[541,10],[641,10],[637,10],[629,302],[542,692],[543,10],[642,302],[626,6],[636,693],[640,460],[544,10],[630,10],[625,460],[628,10],[612,694],[614,695],[615,10],[616,302],[613,10],[638,10],[627,10],[619,495],[617,10],[618,10],[620,6],[639,333],[621,10],[622,10],[623,6],[624,6],[631,10],[1104,696],[611,697],[546,6],[547,6],[548,6],[549,6],[550,6],[551,6],[552,6],[553,6],[554,6],[555,6],[556,6],[557,6],[545,6],[558,6],[559,6],[560,6],[561,6],[562,6],[563,6],[564,6],[565,6],[566,6],[567,6],[568,6],[569,6],[570,6],[571,6],[572,6],[573,6],[574,6],[575,6],[576,6],[577,6],[578,6],[579,6],[580,6],[581,6],[582,6],[583,6],[584,6],[585,6],[586,6],[587,6],[588,6],[589,6],[590,6],[591,6],[592,6],[593,6],[594,6],[595,6],[596,6],[597,6],[598,6],[599,6],[600,6],[601,6],[602,6],[603,6],[604,6],[605,6],[606,6],[607,6],[110,6],[609,6],[610,6],[608,6],[1103,698],[485,699],[488,692],[151,6],[156,6],[152,6],[157,700],[153,6],[154,6],[155,10],[499,6],[489,6],[490,259],[491,6],[500,701],[492,702],[493,6],[494,6],[495,259],[498,6],[496,259],[497,6],[158,6],[159,10],[178,703],[161,704],[165,705],[163,706],[164,707],[162,6],[166,10],[175,708],[160,10],[176,708],[177,10],[487,709],[486,710],[2428,6],[2137,711],[1450,712],[1451,713],[1449,6],[1505,714],[1457,715],[1459,716],[1452,712],[1506,717],[1458,718],[1463,719],[1464,718],[1465,720],[1466,718],[1467,721],[1468,720],[1469,718],[1470,718],[1502,722],[1497,723],[1498,718],[1499,718],[1471,718],[1472,718],[1500,718],[1473,718],[1493,718],[1496,718],[1495,718],[1494,718],[1474,718],[1475,718],[1476,719],[1477,718],[1478,718],[1491,718],[1480,718],[1479,718],[1503,718],[1482,718],[1501,718],[1481,718],[1492,718],[1484,722],[1485,718],[1487,720],[1486,718],[1488,718],[1504,718],[1489,718],[1490,718],[1455,724],[1454,6],[1460,725],[1462,726],[1456,6],[1461,727],[1483,727],[1453,728],[1508,729],[1515,730],[1516,730],[1518,731],[1517,730],[1507,732],[1521,733],[1510,734],[1512,735],[1520,736],[1513,737],[1511,738],[1519,739],[1514,740],[1509,741],[2068,6],[2456,6],[1522,6],[484,742],[2481,6],[917,6],[2489,6],[1100,6],[1713,6],[113,743],[2445,744],[2443,745],[2444,746],[2432,747],[2433,745],[2440,748],[2431,749],[2436,750],[2446,6],[2437,751],[2442,752],[2448,753],[2447,754],[2430,755],[2438,756],[2439,757],[2434,758],[2441,744],[2435,759],[1714,760],[1717,761],[1715,165],[1716,762],[2425,763],[2424,764],[2469,765],[2450,6],[2470,766],[2452,767],[2477,768],[2471,6],[2473,769],[2474,769],[2475,770],[2472,6],[2476,771],[2455,772],[2453,6],[2454,773],[2468,774],[2451,6],[2466,775],[2457,776],[2458,777],[2459,777],[2460,776],[2467,778],[2461,777],[2462,775],[2463,776],[2464,777],[2465,776],[2053,779],[2052,780],[2055,781],[2054,782],[2000,780],[2019,783],[2012,6],[2003,784],[2001,780],[2004,780],[2002,785],[2005,780],[2007,780],[2006,780],[2009,780],[2008,780],[2011,780],[2010,780],[2013,786],[2014,780],[2018,787],[2015,788],[2016,780],[2017,780],[2035,789],[2021,789],[2029,789],[2020,6],[2037,790],[2031,791],[2033,6],[2036,792],[2024,793],[2025,793],[2027,793],[2023,794],[2030,795],[2026,793],[2022,793],[2032,789],[2034,796],[2028,797],[2429,6],[2493,798],[2492,6],[1886,799],[1543,800],[1530,6],[1540,6],[1536,6],[1537,6],[1531,6],[1541,6],[1542,6],[1539,6],[1535,6],[1534,6],[1538,801],[1532,6],[1533,6],[1598,802],[1597,10],[1643,10],[1592,10],[1593,6],[1594,803],[1662,10],[1663,804],[1664,10],[1666,805],[1665,10],[1599,10],[1667,10],[1668,10],[1696,806],[1697,807],[1692,10],[1669,808],[1670,808],[1672,809],[1671,810],[1673,10],[1674,808],[1698,10],[1700,811],[1676,812],[1675,10],[1687,10],[1688,808],[1689,808],[1690,808],[1701,806],[1677,10],[1605,813],[1602,10],[1603,814],[1604,6],[1596,815],[1595,6],[1644,10],[1691,10],[1699,816],[1615,817],[1613,818],[1614,819],[1642,820],[1694,6],[1695,821],[1680,822],[1647,823],[1648,824],[1649,810],[1650,825],[1702,10],[1703,826],[1651,810],[1652,827],[1653,828],[1704,810],[1705,829],[1706,830],[1707,831],[1640,832],[1641,833],[1681,810],[1682,834],[1708,835],[1709,836],[1621,10],[1654,810],[1656,837],[1655,810],[1657,838],[1659,839],[1591,840],[1711,841],[1710,842],[1904,843],[1903,844],[1712,6],[1906,845],[1905,816],[1683,846],[1684,847],[1601,848],[1600,10],[1661,849],[1660,810],[1686,850],[1685,851],[1907,852],[1908,853],[1606,854],[1646,855],[1645,856],[1678,857],[1693,858],[1679,6],[1627,820],[1633,6],[1632,859],[1636,6],[1620,6],[1622,835],[1630,860],[1631,6],[1618,861],[1619,862],[1609,6],[1616,863],[1639,864],[1624,865],[1590,6],[1612,866],[1629,6],[1635,867],[1634,10],[1617,816],[1628,868],[1625,6],[1623,6],[1638,869],[1626,820],[1637,6],[1658,6],[84,6],[85,6],[15,6],[13,6],[14,6],[19,6],[18,6],[2,6],[20,6],[21,6],[22,6],[23,6],[24,6],[25,6],[26,6],[27,6],[3,6],[28,6],[29,6],[4,6],[30,6],[34,6],[31,6],[32,6],[33,6],[35,6],[36,6],[37,6],[5,6],[38,6],[39,6],[40,6],[41,6],[6,6],[45,6],[42,6],[43,6],[44,6],[46,6],[7,6],[47,6],[52,6],[53,6],[48,6],[49,6],[50,6],[51,6],[8,6],[57,6],[54,6],[55,6],[56,6],[58,6],[9,6],[59,6],[60,6],[61,6],[63,6],[62,6],[64,6],[65,6],[10,6],[66,6],[67,6],[68,6],[11,6],[69,6],[70,6],[71,6],[72,6],[73,6],[1,6],[74,6],[75,6],[12,6],[79,6],[77,6],[82,6],[81,6],[86,6],[76,6],[80,6],[78,6],[83,6],[17,6],[16,6],[2482,6],[2344,870],[2354,871],[2343,870],[2364,872],[2335,873],[2334,874],[2363,250],[2357,875],[2362,876],[2337,877],[2351,878],[2336,879],[2360,880],[2332,881],[2331,250],[2361,882],[2333,883],[2338,884],[2339,6],[2342,884],[2329,6],[2365,885],[2355,886],[2346,887],[2347,888],[2349,889],[2345,890],[2348,891],[2358,250],[2340,892],[2341,893],[2350,894],[2330,895],[2353,886],[2352,884],[2356,6],[2359,896],[2494,897],[2490,898],[2491,899],[2496,900],[2497,901],[2495,6],[2501,902],[2500,903],[2502,904],[2499,905],[2503,906],[2505,907],[2506,906],[92,908],[2480,909],[2427,910],[2426,911],[88,911],[87,6],[89,912],[90,6],[91,913],[2478,914],[2449,6],[2479,915],[2117,6],[112,10],[2299,916],[2298,10],[106,10],[107,917],[2484,255],[103,918],[104,919],[2075,10],[2498,6],[1553,920],[1569,920],[1561,920],[1570,920],[1571,920],[1431,920],[1572,920],[1555,920],[1562,920],[1423,920],[1421,920],[1427,920],[1563,921],[1564,920],[1446,920],[1565,920],[1430,920],[1573,920],[1574,920],[1524,920],[1575,920],[1576,920],[1577,920],[1566,920],[1567,920],[1578,920],[1579,920],[1580,920],[1581,920],[150,920],[1582,920],[1583,920],[1568,920],[1429,920],[1584,920],[131,922],[1557,923],[1969,924],[1970,925],[1990,926],[1556,927],[1991,928],[1992,929],[1993,930],[1994,929],[2082,931],[2083,932],[2084,929],[2085,933],[2087,934],[2088,935],[2086,936],[2089,937],[2091,938],[2092,939],[2090,940],[2095,941],[2093,939],[2096,942],[2094,939],[2077,943],[2078,944],[2080,945],[2081,946],[2079,929],[1447,947],[2097,948],[2098,929],[2099,928],[2076,949],[1968,950],[1523,951],[2100,952],[2115,953],[128,940],[138,940],[111,940],[132,940],[129,940],[130,940],[2116,954],[1414,4],[147,955],[1432,4],[143,956],[2118,957],[2119,958],[1559,4],[2131,959],[2135,960],[2138,961],[2140,962],[2142,963],[2143,4],[1415,964],[144,965],[145,964],[146,928],[1107,966],[148,967],[149,964],[1106,968],[1108,969],[141,970],[142,971],[1114,972],[1109,973],[1111,974],[1112,975],[1113,976],[1115,977],[1560,978],[1558,979],[2141,956],[2144,980],[1547,981],[1546,982],[2139,983],[1554,984],[134,985],[140,986],[137,987],[136,988],[135,940],[1971,940],[1972,940],[2145,940],[1448,940],[1525,940],[2146,940],[1105,989],[2147,4],[1441,990],[1974,940],[1433,991],[1550,992],[1548,993],[1552,994],[1549,995],[139,996],[1973,940],[1110,997],[133,940],[1551,940],[1418,940],[1419,998],[1417,999],[1416,1000],[2148,1001],[2149,1002],[2150,1003],[2151,1004],[2152,1005],[2153,1006],[2154,1007],[2155,1008],[2156,1009],[2162,1010],[2160,1011],[2159,1012],[2158,1013],[2161,1014],[2157,1015],[2164,1016],[2163,1017],[2165,1016],[2166,1016],[2167,1018],[2168,1019],[2169,1020],[2170,1021],[2171,1022],[2172,932],[2173,1021],[2174,1023],[2175,1024],[2176,1025],[2177,1026],[2178,1027],[2179,1028],[2180,1029],[2188,1030],[2184,1031],[2189,1032],[2182,929],[1425,1033],[2190,1034],[2183,1030],[2185,1035],[2186,1036],[2192,1037],[2193,1035],[2194,1038],[2191,1039],[2196,1040],[2197,1041],[2198,1042],[2195,940],[2200,1043],[2201,1044],[2202,1045],[2199,940],[1424,940],[2204,1046],[2205,1047],[2206,1048],[2203,940],[2208,1049],[2209,1050],[2210,1051],[2207,940],[2212,1052],[2213,1053],[2214,1054],[2211,940],[2216,1055],[2217,1056],[2218,1057],[2215,940],[2220,1058],[2221,929],[2222,1059],[2219,940],[2224,1060],[2225,1061],[2223,940],[2227,1062],[2228,929],[2229,1063],[2226,940],[2231,1064],[2232,1065],[2233,1066],[2230,940],[2235,1067],[2236,929],[2237,1068],[2234,940],[2238,1069],[2181,1070],[1426,1071],[2240,1072],[2239,928],[2241,1073],[2187,1074],[2243,1075],[2246,1076],[2244,1077],[2245,1078],[2242,1079],[2247,1080],[2248,1081],[1422,1082],[2249,1083],[2250,1080],[1118,1084],[1117,1084],[1116,1085],[1428,1086],[2251,1087],[2252,1088],[2257,1089],[2258,1090],[2253,1091],[2255,1092],[2254,1093],[2256,1094],[2259,929],[2260,1095],[2261,1096],[2262,1097],[2263,1098],[2264,1099],[2265,1100],[2266,1101],[2267,1102],[2268,1103],[1445,929],[2269,1104],[2270,1105],[2271,1106],[2272,1107],[2273,1108],[2274,1109],[2275,1110],[2276,1111],[2277,1112],[2278,1113],[2279,1112],[2280,1114],[2281,1115],[2282,1116],[2283,1117],[2284,1118],[2285,1119],[2286,1120],[2287,1121],[2288,1122],[2289,1123],[2290,1124],[2291,1125],[2292,1126],[2293,1127],[2294,1128],[2295,1129],[2296,1130],[2297,1131],[2300,1132],[2302,1133],[2301,1134],[2303,1135],[1529,1136],[1444,1137],[1443,1138],[1544,1139],[1436,1140],[1440,1138],[1439,1138],[1437,1141],[1438,1141],[1442,1142],[1527,1143],[1526,1144],[2304,1145],[1545,1146],[2305,1147],[2306,929],[2307,1148],[2308,929],[2309,929],[2310,929],[2311,929],[2312,1149],[2313,1150],[1420,1151],[2314,1152],[2317,6],[2318,1153],[2507,1154]],"semanticDiagnosticsPerFile":[[1428,[{"start":1757,"length":4,"code":2322,"category":1,"messageText":{"messageText":"Type '\"\" | \"info\" | \"danger\"' is not assignable to type '\"success\" | \"primary\" | \"warning\" | \"info\" | \"danger\" | undefined'.","category":1,"code":2322,"next":[{"messageText":"Type '\"\"' is not assignable to type '\"success\" | \"primary\" | \"warning\" | \"info\" | \"danger\" | undefined'.","category":1,"code":2322}]},"relatedInformation":[{"file":"./node_modules/element-plus/es/components/tag/src/tag.vue.d.ts","start":846,"length":4,"messageText":"The expected type comes from property 'type' which is declared here on type 'Partial<{ type: \"success\" | \"primary\" | \"warning\" | \"info\" | \"danger\"; effect: \"light\" | \"dark\" | \"plain\"; }> & Omit<{ readonly type: \"success\" | \"primary\" | \"warning\" | \"info\" | \"danger\"; ... 8 more ...; onClose?: ((evt: MouseEvent) => any) | undefined; } & VNodeProps & AllowedComponentProps & ComponentCustomProps,...'","category":3,"code":6500}]},{"start":7601,"length":4,"code":2322,"category":1,"messageText":"Type 'string' is not assignable to type '\"success\" | \"primary\" | \"warning\" | \"info\" | \"danger\" | undefined'.","relatedInformation":[{"file":"./node_modules/element-plus/es/components/tag/src/tag.vue.d.ts","start":846,"length":4,"messageText":"The expected type comes from property 'type' which is declared here on type 'Partial<{ type: \"success\" | \"primary\" | \"warning\" | \"info\" | \"danger\"; effect: \"light\" | \"dark\" | \"plain\"; }> & Omit<{ readonly type: \"success\" | \"primary\" | \"warning\" | \"info\" | \"danger\"; ... 8 more ...; onClose?: ((evt: MouseEvent) => any) | undefined; } & VNodeProps & AllowedComponentProps & ComponentCustomProps,...'","category":3,"code":6500}]}]],[1436,[{"start":14231,"length":34,"code":2322,"category":1,"messageText":"Type 'string' is not assignable to type 'number'."}]],[1971,[{"start":10172,"length":13,"code":2339,"category":1,"messageText":"Property 'captureStream' does not exist on type 'HTMLVideoElement'."}]],[2082,[{"start":860,"length":28,"code":7016,"category":1,"messageText":{"messageText":"Could not find a declaration file for module '@wangeditor/editor-for-vue'. '/Users/long/Work/zyt/admin/node_modules/@wangeditor/editor-for-vue/dist/index.esm.js' implicitly has an 'any' type.","category":1,"code":7016,"next":[{"info":{"moduleReference":"@wangeditor/editor-for-vue","mode":99}}]}}]],[2178,[{"start":72450,"length":19,"code":2322,"category":1,"messageText":{"messageText":"Type '{ name: any; code: any; children: any; }[]' is not assignable to type 'never[]'.","category":1,"code":2322,"next":[{"messageText":"Type '{ name: any; code: any; children: any; }' is not assignable to type 'never'.","category":1,"code":2322}]}},{"start":72712,"length":962,"code":2322,"category":1,"messageText":"Type '{ name: string; children: { name: string; children: { name: string; }[]; }[]; }' is not assignable to type 'never'."},{"start":73688,"length":457,"code":2322,"category":1,"messageText":"Type '{ name: string; children: { name: string; children: { name: string; }[]; }[]; }' is not assignable to type 'never'."},{"start":74159,"length":457,"code":2322,"category":1,"messageText":"Type '{ name: string; children: { name: string; children: { name: string; }[]; }[]; }' is not assignable to type 'never'."},{"start":74630,"length":780,"code":2322,"category":1,"messageText":"Type '{ name: string; children: { name: string; children: { name: string; }[]; }[]; }' is not assignable to type 'never'."},{"start":48304,"length":6,"code":2322,"category":1,"messageText":{"messageText":"Type '(value: string[]) => void' is not assignable to type '(value: CascaderValue | null | undefined) => any'.","category":1,"code":2322,"next":[{"messageText":"Types of parameters 'value' and 'value' are incompatible.","category":1,"code":2328,"next":[{"messageText":"Type 'CascaderValue | null | undefined' is not assignable to type 'string[]'.","category":1,"code":2322,"next":[{"messageText":"Type 'undefined' is not assignable to type 'string[]'.","category":1,"code":2322}]}]}]},"relatedInformation":[{"file":"./node_modules/element-plus/es/components/cascader/src/cascader.vue.d.ts","start":3298,"length":8,"messageText":"The expected type comes from property 'onChange' which is declared here on type '__VLS_NormalizeComponentEvent<NonNullable<Partial<{ disabled: boolean; separator: string; props: CascaderProps; placement: Placement; options: CascaderOption[]; effect: PopperEffect; ... 15 more ...; showCheckedStrategy: \"parent\" | \"child\"; }> & Omit<...> & Record<...>>, { ...; }, \"onChange\", \"change\", \"change\">'","category":3,"code":6500}]}]],[2180,[{"start":115604,"length":19,"code":2322,"category":1,"messageText":{"messageText":"Type '{ value: any; label: any; code: any; children: any; }[]' is not assignable to type 'never[]'.","category":1,"code":2322,"next":[{"messageText":"Type '{ value: any; label: any; code: any; children: any; }' is not assignable to type 'never'.","category":1,"code":2322}]}},{"start":147979,"length":1,"messageText":"Parameter 'v' implicitly has an 'any' type.","category":1,"code":7006},{"start":155179,"length":15,"code":2322,"category":1,"messageText":{"messageText":"Type 'string | number | undefined' is not assignable to type 'number | undefined'.","category":1,"code":2322,"next":[{"messageText":"Type 'string' is not assignable to type 'number'.","category":1,"code":2322}]},"relatedInformation":[{"file":"./src/api/tcm.ts","start":12001,"length":15,"messageText":"The expected type comes from property 'medication_days' which is declared here on type '{ id: number; dose_count?: number | undefined; medication_days?: number | undefined; }'","category":3,"code":6500}]},{"start":160705,"length":15,"code":2353,"category":1,"messageText":"Object literal may only specify known properties, and 'tracking_number' does not exist in type '{ fulfillment_status?: number | undefined; }'."},{"start":167523,"length":18,"code":2353,"category":1,"messageText":"Object literal may only specify known properties, and 'completion_request' does not exist in type '{ id: number; order_type: number; pay_amount: number; pay_remark?: string | undefined; }'."},{"start":168029,"length":13,"code":2561,"category":1,"messageText":"Object literal may only specify known properties, but 'pay_order_ids' does not exist in type '{ id: number; pay_order_id: number; }'. Did you mean to write 'pay_order_id'?"},{"start":11139,"length":4,"code":2322,"category":1,"messageText":{"messageText":"Type 'unknown[]' is not assignable to type 'TreeNodeData[]'.","category":1,"code":2322,"next":[{"messageText":"Type 'unknown' is not assignable to type 'TreeNodeData'.","category":1,"code":2322}]},"relatedInformation":[{"file":"./node_modules/element-plus/es/components/tree-select/src/tree-select.vue.d.ts","start":30781,"length":4,"messageText":"The expected type comes from property 'data' which is declared here on type 'Partial<{ data: TreeData; disabled: EpPropMergeType<BooleanConstructor, unknown, unknown>; tabindex: EpPropMergeType<(NumberConstructor | StringConstructor)[], unknown, unknown>; ... 48 more ...; cacheData: unknown[]; }> & Omit<...> & Record<...>'","category":3,"code":6500}]},{"start":23264,"length":10,"code":2345,"category":1,"messageText":{"messageText":"Argument of type 'Record<string, any>' is not assignable to parameter of type '{ id: number; }'.","category":1,"code":2345,"next":[{"messageText":"Property 'id' is missing in type 'Record<string, any>' but required in type '{ id: number; }'.","category":1,"code":2741}]},"relatedInformation":[{"start":152027,"length":2,"messageText":"'id' is declared here.","category":3,"code":2728}]},{"start":23742,"length":10,"code":2345,"category":1,"messageText":{"messageText":"Argument of type 'Record<string, any>' is not assignable to parameter of type '{ id: number; }'.","category":1,"code":2345,"next":[{"messageText":"Property 'id' is missing in type 'Record<string, any>' but required in type '{ id: number; }'.","category":1,"code":2741}]},"relatedInformation":[{"start":169095,"length":2,"messageText":"'id' is declared here.","category":3,"code":2728}]},{"start":24188,"length":10,"code":2345,"category":1,"messageText":{"messageText":"Argument of type 'Record<string, any>' is not assignable to parameter of type '{ id: number; }'.","category":1,"code":2345,"next":[{"messageText":"Property 'id' is missing in type 'Record<string, any>' but required in type '{ id: number; }'.","category":1,"code":2741}]},"relatedInformation":[{"start":152027,"length":2,"messageText":"'id' is declared here.","category":3,"code":2728}]},{"start":24658,"length":10,"code":2345,"category":1,"messageText":{"messageText":"Argument of type 'Record<string, any>' is not assignable to parameter of type '{ id: number; }'.","category":1,"code":2345,"next":[{"messageText":"Property 'id' is missing in type 'Record<string, any>' but required in type '{ id: number; }'.","category":1,"code":2741}]},"relatedInformation":[{"start":169951,"length":2,"messageText":"'id' is declared here.","category":3,"code":2728}]},{"start":25094,"length":10,"code":2345,"category":1,"messageText":{"messageText":"Argument of type 'Record<string, any>' is not assignable to parameter of type '{ id: number; express_company?: unknown; tracking_number?: unknown; }'.","category":1,"code":2345,"next":[{"messageText":"Property 'id' is missing in type 'Record<string, any>' but required in type '{ id: number; express_company?: unknown; tracking_number?: unknown; }'.","category":1,"code":2741}]},"relatedInformation":[{"start":161591,"length":2,"messageText":"'id' is declared here.","category":3,"code":2728}]},{"start":25549,"length":10,"code":2345,"category":1,"messageText":{"messageText":"Argument of type 'Record<string, any>' is not assignable to parameter of type '{ id: number; diagnosis_id?: number | undefined; pay_order_ids?: number[] | undefined; }'.","category":1,"code":2345,"next":[{"messageText":"Property 'id' is missing in type 'Record<string, any>' but required in type '{ id: number; diagnosis_id?: number | undefined; pay_order_ids?: number[] | undefined; }'.","category":1,"code":2741}]},"relatedInformation":[{"start":166332,"length":2,"messageText":"'id' is declared here.","category":3,"code":2728}]},{"start":25999,"length":10,"code":2345,"category":1,"messageText":{"messageText":"Argument of type 'Record<string, any>' is not assignable to parameter of type '{ id: number; }'.","category":1,"code":2345,"next":[{"messageText":"Property 'id' is missing in type 'Record<string, any>' but required in type '{ id: number; }'.","category":1,"code":2741}]},"relatedInformation":[{"start":168855,"length":2,"messageText":"'id' is declared here.","category":3,"code":2728}]},{"start":65940,"length":7,"code":2322,"category":1,"messageText":{"messageText":"Type 'string | number | undefined' is not assignable to type 'number | null | undefined'.","category":1,"code":2322,"next":[{"messageText":"Type 'string' is not assignable to type 'number'.","category":1,"code":2322}]},"relatedInformation":[{"file":"./node_modules/element-plus/es/components/input-number/src/input-number.d.ts","start":752,"length":10,"messageText":"The expected type comes from property 'modelValue' which is declared here on type 'Partial<{ disabled: boolean; id: string; valueOnClear: number | \"max\" | \"min\" | null; min: number; max: number; inputmode: \"text\" | \"url\" | \"none\" | \"search\" | \"email\" | \"tel\" | \"numeric\" | \"decimal\"; ... 6 more ...; stepStrictly: boolean; }> & Omit<...> & Record<...>'","category":3,"code":6500}]},{"start":77832,"length":7,"code":2322,"category":1,"messageText":{"messageText":"Type 'string | number | undefined' is not assignable to type 'number | null | undefined'.","category":1,"code":2322,"next":[{"messageText":"Type 'string' is not assignable to type 'number'.","category":1,"code":2322}]},"relatedInformation":[{"file":"./node_modules/element-plus/es/components/input-number/src/input-number.d.ts","start":752,"length":10,"messageText":"The expected type comes from property 'modelValue' which is declared here on type 'Partial<{ disabled: boolean; id: string; valueOnClear: number | \"max\" | \"min\" | null; min: number; max: number; inputmode: \"text\" | \"url\" | \"none\" | \"search\" | \"email\" | \"tel\" | \"numeric\" | \"decimal\"; ... 6 more ...; stepStrictly: boolean; }> & Omit<...> & Record<...>'","category":3,"code":6500}]},{"start":105819,"length":1,"messageText":"Parameter 'r' implicitly has an 'any' type.","category":1,"code":7006}]],[2192,[{"start":316,"length":8,"code":2345,"category":1,"messageText":{"messageText":"Argument of type '{ modelValue: any; }' is not assignable to parameter of type '{ readonly modelValue: any[]; readonly max?: number | undefined; readonly min?: number | undefined; readonly itemData: any; readonly \"onUpdate:modelValue\"?: ((value: any) => any) | undefined; } & VNodeProps & AllowedComponentProps & ComponentCustomProps & Record<...>'.","category":1,"code":2345,"next":[{"messageText":"Property 'itemData' is missing in type '{ modelValue: any; }' but required in type '{ readonly modelValue: any[]; readonly max?: number | undefined; readonly min?: number | undefined; readonly itemData: any; readonly \"onUpdate:modelValue\"?: ((value: any) => any) | undefined; }'.","category":1,"code":2741,"canonicalHead":{"code":2322,"messageText":"Type '{ modelValue: any; }' is not assignable to type '{ readonly modelValue: any[]; readonly max?: number | undefined; readonly min?: number | undefined; readonly itemData: any; readonly \"onUpdate:modelValue\"?: ((value: any) => any) | undefined; }'."}}]},"relatedInformation":[{"file":"./src/views/decoration/component/tabbar/pc/menu-set.vue","start":3919,"length":8,"messageText":"'itemData' is declared here.","category":3,"code":2728}]},{"start":442,"length":8,"code":2345,"category":1,"messageText":{"messageText":"Argument of type '{ modelValue: any; }' is not assignable to parameter of type '{ readonly modelValue: any[]; readonly max?: number | undefined; readonly min?: number | undefined; readonly itemData: any; readonly \"onUpdate:modelValue\"?: ((value: any) => any) | undefined; } & VNodeProps & AllowedComponentProps & ComponentCustomProps & Record<...>'.","category":1,"code":2345,"next":[{"messageText":"Property 'itemData' is missing in type '{ modelValue: any; }' but required in type '{ readonly modelValue: any[]; readonly max?: number | undefined; readonly min?: number | undefined; readonly itemData: any; readonly \"onUpdate:modelValue\"?: ((value: any) => any) | undefined; }'.","category":1,"code":2741,"canonicalHead":{"code":2322,"messageText":"Type '{ modelValue: any; }' is not assignable to type '{ readonly modelValue: any[]; readonly max?: number | undefined; readonly min?: number | undefined; readonly itemData: any; readonly \"onUpdate:modelValue\"?: ((value: any) => any) | undefined; }'."}}]},"relatedInformation":[{"file":"./src/views/decoration/component/tabbar/pc/menu-set.vue","start":3919,"length":8,"messageText":"'itemData' is declared here.","category":3,"code":2728}]}]],[2205,[{"start":190,"length":6,"code":2339,"category":1,"messageText":"Property 'height' does not exist on type '{}'."}]],[2247,[{"start":5579,"length":5,"messageText":"Parameter 'depts' implicitly has an 'any' type.","category":1,"code":7006},{"start":5607,"length":6,"messageText":"Variable 'result' implicitly has type 'any[]' in some locations where its type cannot be determined.","category":1,"code":7034},{"start":5645,"length":4,"messageText":"Parameter 'dept' implicitly has an 'any' type.","category":1,"code":7006},{"start":5811,"length":6,"messageText":"Variable 'result' implicitly has an 'any[]' type.","category":1,"code":7005},{"start":5906,"length":6,"messageText":"Variable 'result' implicitly has an 'any[]' type.","category":1,"code":7005}]],[2250,[{"start":10049,"length":47,"code":2769,"category":1,"messageText":{"messageText":"No overload matches this call.","category":1,"code":2769,"next":[{"messageText":"Overload 1 of 3, '(callbackfn: (previousValue: unknown, currentValue: unknown, currentIndex: number, array: unknown[]) => unknown, initialValue: unknown): unknown', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Argument of type '(total: number, count: number) => number' is not assignable to parameter of type '(previousValue: unknown, currentValue: unknown, currentIndex: number, array: unknown[]) => unknown'.","category":1,"code":2345,"next":[{"messageText":"Types of parameters 'total' and 'previousValue' are incompatible.","category":1,"code":2328,"next":[{"messageText":"Type 'unknown' is not assignable to type 'number'.","category":1,"code":2322}]}]}]},{"messageText":"Overload 2 of 3, '(callbackfn: (previousValue: number, currentValue: unknown, currentIndex: number, array: unknown[]) => number, initialValue: number): number', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Argument of type '(total: number, count: number) => number' is not assignable to parameter of type '(previousValue: number, currentValue: unknown, currentIndex: number, array: unknown[]) => number'.","category":1,"code":2345,"next":[{"messageText":"Types of parameters 'count' and 'currentValue' are incompatible.","category":1,"code":2328,"next":[{"messageText":"Type 'unknown' is not assignable to type 'number'.","category":1,"code":2322}]}]}]}]},"relatedInformation":[]},{"start":10250,"length":47,"code":2769,"category":1,"messageText":{"messageText":"No overload matches this call.","category":1,"code":2769,"next":[{"messageText":"Overload 1 of 3, '(callbackfn: (previousValue: unknown, currentValue: unknown, currentIndex: number, array: unknown[]) => unknown, initialValue: unknown): unknown', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Argument of type '(total: number, count: number) => number' is not assignable to parameter of type '(previousValue: unknown, currentValue: unknown, currentIndex: number, array: unknown[]) => unknown'.","category":1,"code":2345,"next":[{"messageText":"Types of parameters 'total' and 'previousValue' are incompatible.","category":1,"code":2328,"next":[{"messageText":"Type 'unknown' is not assignable to type 'number'.","category":1,"code":2322}]}]}]},{"messageText":"Overload 2 of 3, '(callbackfn: (previousValue: number, currentValue: unknown, currentIndex: number, array: unknown[]) => number, initialValue: number): number', gave the following error.","category":1,"code":2772,"next":[{"messageText":"Argument of type '(total: number, count: number) => number' is not assignable to parameter of type '(previousValue: number, currentValue: unknown, currentIndex: number, array: unknown[]) => number'.","category":1,"code":2345,"next":[{"messageText":"Types of parameters 'count' and 'currentValue' are incompatible.","category":1,"code":2328,"next":[{"messageText":"Type 'unknown' is not assignable to type 'number'.","category":1,"code":2322}]}]}]}]},"relatedInformation":[]},{"start":4609,"length":4,"code":2322,"category":1,"messageText":"Type 'string' is not assignable to type '\"success\" | \"primary\" | \"warning\" | \"info\" | \"danger\" | undefined'.","relatedInformation":[{"file":"./node_modules/element-plus/es/components/tag/src/tag.vue.d.ts","start":846,"length":4,"messageText":"The expected type comes from property 'type' which is declared here on type 'Partial<{ type: \"success\" | \"primary\" | \"warning\" | \"info\" | \"danger\"; effect: \"light\" | \"dark\" | \"plain\"; }> & Omit<{ readonly type: \"success\" | \"primary\" | \"warning\" | \"info\" | \"danger\"; ... 8 more ...; onClose?: ((evt: MouseEvent) => any) | undefined; } & VNodeProps & AllowedComponentProps & ComponentCustomProps,...'","category":3,"code":6500}]},{"start":6777,"length":4,"code":2322,"category":1,"messageText":"Type 'string' is not assignable to type '\"success\" | \"primary\" | \"warning\" | \"info\" | \"danger\" | undefined'.","relatedInformation":[{"file":"./node_modules/element-plus/es/components/tag/src/tag.vue.d.ts","start":846,"length":4,"messageText":"The expected type comes from property 'type' which is declared here on type 'Partial<{ type: \"success\" | \"primary\" | \"warning\" | \"info\" | \"danger\"; effect: \"light\" | \"dark\" | \"plain\"; }> & Omit<{ readonly type: \"success\" | \"primary\" | \"warning\" | \"info\" | \"danger\"; ... 8 more ...; onClose?: ((evt: MouseEvent) => any) | undefined; } & VNodeProps & AllowedComponentProps & ComponentCustomProps,...'","category":3,"code":6500}]}]],[2251,[{"start":7456,"length":4,"code":2322,"category":1,"messageText":"Type 'string' is not assignable to type '\"success\" | \"primary\" | \"warning\" | \"info\" | \"danger\" | undefined'.","relatedInformation":[{"file":"./node_modules/element-plus/es/components/tag/src/tag.vue.d.ts","start":846,"length":4,"messageText":"The expected type comes from property 'type' which is declared here on type 'Partial<{ type: \"success\" | \"primary\" | \"warning\" | \"info\" | \"danger\"; effect: \"light\" | \"dark\" | \"plain\"; }> & Omit<{ readonly type: \"success\" | \"primary\" | \"warning\" | \"info\" | \"danger\"; ... 8 more ...; onClose?: ((evt: MouseEvent) => any) | undefined; } & VNodeProps & AllowedComponentProps & ComponentCustomProps,...'","category":3,"code":6500}]}]],[2261,[{"start":386,"length":10,"code":2322,"category":1,"messageText":{"messageText":"Type '(opts?: { silent?: boolean; }) => Promise<any>' is not assignable to type '(name: TabPaneName) => any'.","category":1,"code":2322,"next":[{"messageText":"Types of parameters 'opts' and 'name' are incompatible.","category":1,"code":2328,"next":[{"messageText":"Type 'TabPaneName' is not assignable to type '{ silent?: boolean | undefined; } | undefined'.","category":1,"code":2322,"next":[{"messageText":"Type 'string' has no properties in common with type '{ silent?: boolean | undefined; }'.","category":1,"code":2559}]}]}]},"relatedInformation":[{"file":"./node_modules/element-plus/es/components/tabs/src/tabs.d.ts","start":8466,"length":11,"messageText":"The expected type comes from property 'onTabChange' which is declared here on type '__VLS_NormalizeComponentEvent<NonNullable<Partial<{ readonly tabindex: EpPropMergeType<readonly [StringConstructor, NumberConstructor], unknown, unknown>; readonly stretch: boolean; ... 5 more ...; readonly addable: boolean; }> & Omit<...> & Record<...>>, { ...; }, \"onTabChange\", \"tab-change\", \"tabChange\">'","category":3,"code":6500}]}]],[2264,[{"start":46757,"length":34,"messageText":"This comparison appears to be unintentional because the types '\"supplement\"' and '\"normal\"' have no overlap.","category":1,"code":2367},{"start":18780,"length":28,"messageText":"This comparison appears to be unintentional because the types '\"supplement\"' and '\"normal\"' have no overlap.","category":1,"code":2367}]],[2265,[{"start":723,"length":5,"code":2353,"category":1,"messageText":"Object literal may only specify known properties, and 'value' does not exist in type 'TreeOptionProps'.","relatedInformation":[{"file":"./node_modules/element-plus/es/components/tree-select/src/tree-select.vue.d.ts","start":31111,"length":5,"messageText":"The expected type comes from property 'props' which is declared here on type 'Partial<{ data: TreeData; disabled: EpPropMergeType<BooleanConstructor, unknown, unknown>; tabindex: EpPropMergeType<(NumberConstructor | StringConstructor)[], unknown, unknown>; ... 48 more ...; cacheData: unknown[]; }> & Omit<...> & Record<...>'","category":3,"code":6500}]}]],[2270,[{"start":1689,"length":5,"code":2353,"category":1,"messageText":"Object literal may only specify known properties, and 'value' does not exist in type 'TreeOptionProps'.","relatedInformation":[{"file":"./node_modules/element-plus/es/components/tree-select/src/tree-select.vue.d.ts","start":31111,"length":5,"messageText":"The expected type comes from property 'props' which is declared here on type 'Partial<{ data: TreeData; disabled: EpPropMergeType<BooleanConstructor, unknown, unknown>; tabindex: EpPropMergeType<(NumberConstructor | StringConstructor)[], unknown, unknown>; ... 48 more ...; cacheData: unknown[]; }> & Omit<...> & Record<...>'","category":3,"code":6500}]}]],[2303,[{"start":31557,"length":6,"code":2349,"category":1,"messageText":{"messageText":"This expression is not callable.","category":1,"code":2349,"next":[{"messageText":"Type 'String' has no call signatures.","category":1,"code":2757}]},"relatedInformation":[{"start":31557,"length":6,"messageText":"Are you missing a semicolon?","category":1,"code":2734}]},{"start":32314,"length":2,"code":2349,"category":1,"messageText":{"messageText":"This expression is not callable.","category":1,"code":2349,"next":[{"messageText":"Type 'String' has no call signatures.","category":1,"code":2757}]},"relatedInformation":[{"start":32314,"length":2,"messageText":"Are you missing a semicolon?","category":1,"code":2734}]}]],[2314,[{"start":24155,"length":1,"messageText":"Parameter 'd' implicitly has an 'any' type.","category":1,"code":7006}]]],"affectedFilesPendingEmit":[1553,1569,1561,1570,1571,1431,1572,1555,1562,1423,1421,1427,1563,1564,1446,1565,1430,1573,1574,1524,1575,1576,1577,1566,1567,1578,1579,1580,1581,150,1582,1583,1568,1429,1584,131,1557,1969,1970,1990,1556,1991,1992,1993,1994,2082,2083,2084,2085,2087,2088,2086,2089,2091,2092,2090,2095,2093,2096,2094,2077,2078,2080,2081,2079,1447,2097,2098,2099,2076,1968,1523,2100,2115,128,138,111,132,129,130,2116,1414,147,1432,143,2118,2119,1559,2131,2135,2138,2140,2142,2143,1415,144,145,146,1107,148,149,1106,1108,141,142,1114,1109,1111,1112,1113,1115,1560,1558,2141,2144,1547,1546,2139,1554,134,140,137,136,135,1971,1972,2145,1448,1525,2146,1105,2147,1441,1974,1433,1550,1548,1552,139,1973,1110,133,1551,1418,1419,1417,1416,2148,2149,2150,2151,2152,2153,2154,2155,2156,2162,2160,2159,2158,2161,2157,2164,2163,2165,2166,2167,2168,2169,2170,2171,2172,2173,2174,2175,2176,2177,2178,2179,2180,2188,2184,2189,2182,1425,2190,2183,2185,2186,2192,2193,2194,2191,2196,2197,2198,2195,2200,2201,2202,2199,1424,2204,2205,2206,2203,2208,2209,2210,2207,2212,2213,2214,2211,2216,2217,2218,2215,2220,2221,2222,2219,2224,2225,2223,2227,2228,2229,2226,2231,2232,2233,2230,2235,2236,2237,2234,2238,2181,1426,2240,2239,2241,2187,2243,2246,2244,2245,2242,2247,2248,1422,2249,2250,1118,1117,1116,1428,2251,2252,2257,2258,2253,2255,2254,2256,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,1445,2269,2270,2271,2272,2273,2274,2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2285,2286,2287,2288,2289,2290,2291,2292,2293,2294,2295,2296,2297,2300,2302,2301,2303,1529,1444,1443,1544,1436,1440,1439,1437,1438,1442,1527,1526,2304,1545,2305,2306,2307,2308,2309,2310,2311,2312,2313,1420,2314,2507],"emitSignatures":[111,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1523,1524,1525,1526,1527,1529,1544,1545,1546,1547,1548,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1968,1969,1970,1971,1972,1973,1974,1990,1991,1992,1993,1994,2076,2077,2078,2079,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2115,2116,2118,2119,2131,2135,2138,2139,2140,2141,2142,2143,2144,2145,2146,2147,2148,2149,2150,2151,2152,2153,2154,2155,2156,2157,2158,2159,2160,2161,2162,2163,2164,2165,2166,2167,2168,2169,2170,2171,2172,2173,2174,2175,2176,2177,2178,2179,2180,2181,2182,2183,2184,2185,2186,2187,2188,2189,2190,2191,2192,2193,2194,2195,2196,2197,2198,2199,2200,2201,2202,2203,2204,2205,2206,2207,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274,2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2285,2286,2287,2288,2289,2290,2291,2292,2293,2294,2295,2296,2297,2300,2301,2302,2303,2304,2305,2306,2307,2308,2309,2310,2311,2312,2313,2314,2507],"version":"5.9.3"} \ No newline at end of file diff --git a/server/app/adminapi/controller/doctor/AppointmentController.php b/server/app/adminapi/controller/doctor/AppointmentController.php index 643443e3..d3730db6 100644 --- a/server/app/adminapi/controller/doctor/AppointmentController.php +++ b/server/app/adminapi/controller/doctor/AppointmentController.php @@ -5,6 +5,7 @@ namespace app\adminapi\controller\doctor; use app\adminapi\controller\BaseAdminController; use app\adminapi\lists\doctor\AppointmentLists; use app\adminapi\logic\doctor\AppointmentLogic; +use app\adminapi\logic\doctor\DoctorNoteLogic; use app\adminapi\validate\doctor\AppointmentValidate; /** @@ -104,4 +105,46 @@ class AppointmentController extends BaseAdminController } return $this->success('操作成功'); } + + /** + * @notes 接诊台聚合详情(患者信息 + 诊单病例 + 血糖血压记录) + * @return \think\response\Json + */ + public function reception() + { + $params = (new AppointmentValidate())->goCheck('reception'); + $result = AppointmentLogic::reception($params); + return $this->data($result); + } + + /** + * @notes 通知接诊医助(发企业微信) + * @return \think\response\Json + */ + public function notifyAssistant() + { + $params = (new AppointmentValidate())->post()->goCheck('notifyAssistant'); + $result = AppointmentLogic::notifyAssistant((int) $params['id']); + if (empty($result['ok'])) { + return $this->fail($result['message'] ?? '通知失败'); + } + return $this->success('通知已发送'); + } + + public function addDoctorNote() + { + $params = (new AppointmentValidate())->post()->goCheck('addDoctorNote'); + $params['doctor_id'] = $this->adminId; + $result = DoctorNoteLogic::addOrAppend($params); + if ($result === false) { + return $this->fail(DoctorNoteLogic::getError()); + } + return $this->success('保存成功'); + } + + public function doctorNotes() + { + $params = (new AppointmentValidate())->goCheck('doctorNotes'); + return $this->data(DoctorNoteLogic::getByDiagnosis((int) $params['diagnosis_id'])); + } } diff --git a/server/app/adminapi/logic/doctor/AppointmentLogic.php b/server/app/adminapi/logic/doctor/AppointmentLogic.php index a13fbefa..2f6aa13d 100644 --- a/server/app/adminapi/logic/doctor/AppointmentLogic.php +++ b/server/app/adminapi/logic/doctor/AppointmentLogic.php @@ -10,6 +10,12 @@ use app\common\model\tcm\Diagnosis; use app\common\model\auth\Admin; use app\api\logic\ChatNotifyLogic; use app\adminapi\logic\tcm\PrescriptionLogic; +use app\adminapi\logic\tcm\DiagnosisLogic; +use app\adminapi\logic\tcm\BloodRecordLogic; +use app\adminapi\logic\doctor\DoctorNoteLogic; +use app\common\model\tcm\Prescription; +use app\common\service\wechat\WechatWorkAppMessageService; +use app\common\model\dict\DictData; use think\facade\Db; use think\facade\Log; @@ -444,4 +450,261 @@ class AppointmentLogic extends BaseLogic return false; } } + + /** + * @notes 接诊台聚合:单次返回挂号信息 + 诊单病例 + 血糖血压记录 + 助理姓名 + * 数据复用:detail() / DiagnosisLogic::detail() / BloodRecordLogic::getRecordsByPatient() + * 备注:appointment.patient_id 实际对应 tcm_diagnosis.id + * @param array $params + * @return array + */ + public static function reception(array $params): array + { + // 1) 挂号详情(已包含 patient_name / patient_phone / doctor_name / status_desc 等) + $appointment = self::detail($params); + if (empty($appointment)) { + return []; + } + + // 2) 诊单(病例)详情:appointment.patient_id == tcm_diagnosis.id + $diagnosisId = (int) ($appointment['patient_id'] ?? 0); + $diagnosis = $diagnosisId > 0 + ? DiagnosisLogic::detail(['id' => $diagnosisId]) + : []; + + // 3) 血糖血压记录 + $bloodRecords = $diagnosisId > 0 + ? BloodRecordLogic::getRecordsByPatient(['diagnosis_id' => $diagnosisId]) + : []; + + // 4) 补全医助姓名(detail() 未关联 admin 助理表) + $assistantName = ''; + if (!empty($diagnosis['assistant_id'])) { + $assistant = Admin::where('id', (int) $diagnosis['assistant_id'])->find(); + if ($assistant) { + $assistantName = $assistant->name ?? ''; + } + } + $appointment['assistant_name'] = $assistantName; + $appointment['assistant_id'] = $diagnosis['assistant_id'] ?? 0; + + // 5) 是否已开方(与列表口径一致:未删除 & 未作废) + $hasPrescription = 0; + if ($diagnosisId > 0) { + $rxExists = Prescription::where('diagnosis_id', $diagnosisId) + ->whereNull('delete_time') + ->where('void_status', 0) + ->find(); + $hasPrescription = $rxExists ? 1 : 0; + } + $appointment['has_prescription'] = $hasPrescription; + + // 6) 对诊单字段进行字典/枚举翻译(产出 *_text 附加字段,不覆盖原 value) + $diagnosis = self::enrichDiagnosisLabels($diagnosis); + + // 7) 医生备注 + $doctorNotes = $diagnosisId > 0 + ? DoctorNoteLogic::getByDiagnosis($diagnosisId) + : []; + + return [ + 'appointment' => $appointment, + 'diagnosis' => $diagnosis, + 'blood_records' => $bloodRecords, + 'doctor_notes' => $doctorNotes, + ]; + } + + /** + * 字典翻译:把诊单中以 code 存储的字段(字典/枚举)补一份中文 label 字段, + * 便于前端(接诊台等只读场景)直接渲染,无需加载字典。 + * 原始 code 字段保留不动,edit 场景仍可使用。 + * + * @param array $diagnosis + * @return array + */ + private static function enrichDiagnosisLabels(array $diagnosis): array + { + if (empty($diagnosis)) { + return $diagnosis; + } + + // 单值字段:value 为字典 value,翻译成字典 name + $singleDictFields = [ + 'diagnosis_type' => 'diagnosis_type', + 'syndrome_type' => 'syndrome_type', + 'diabetes_type' => 'diabetes_type', + 'water_intake' => 'water_intake', + 'weight_change' => 'weight_change', + 'fatty_liver_degree' => 'fatty_liver_degree', + ]; + // 多值字段:value 为数组或逗号分隔字符串 + $multiDictFields = [ + 'past_history' => 'past_history', + 'appetite' => 'appetite', + 'diet_condition' => 'diet_condition', + 'body_feeling' => 'body_feeling', + 'sleep_condition' => 'sleep_condition', + 'eye_condition' => 'eye_condition', + 'head_feeling' => 'head_feeling', + 'sweat_condition' => 'sweat_condition', + 'skin_condition' => 'skin_condition', + 'urine_condition' => 'urine_condition', + 'stool_condition' => 'stool_condition', + 'kidney_condition' => 'kidney_condition', + ]; + + // 一次性查出用到的所有字典 + $allTypes = array_values(array_unique(array_merge(array_values($singleDictFields), array_values($multiDictFields)))); + $dictMap = self::buildDictMap($allTypes); + + foreach ($singleDictFields as $field => $type) { + if (!array_key_exists($field, $diagnosis)) { + continue; + } + $diagnosis[$field . '_text'] = self::dictLabel($dictMap, $type, $diagnosis[$field]); + } + foreach ($multiDictFields as $field => $type) { + if (!array_key_exists($field, $diagnosis)) { + continue; + } + $v = $diagnosis[$field]; + $arr = is_array($v) + ? $v + : (is_string($v) && $v !== '' ? preg_split('/[,,、]/', $v) : []); + $labels = []; + foreach ($arr as $item) { + $item = is_string($item) ? trim($item) : $item; + if ($item === '' || $item === null) { + continue; + } + $labels[] = self::dictLabel($dictMap, $type, $item); + } + $diagnosis[$field . '_text'] = implode('、', array_filter($labels)); + } + + // 枚举字段 + $diagnosis['gender_text'] = isset($diagnosis['gender']) ? self::genderText((int) $diagnosis['gender']) : ''; + $diagnosis['marital_status_text'] = array_key_exists('marital_status', $diagnosis) ? self::maritalText($diagnosis['marital_status']) : ''; + foreach (['trauma_history', 'surgery_history', 'allergy_history', 'family_history', 'pregnancy_history'] as $f) { + if (array_key_exists($f, $diagnosis)) { + $diagnosis[$f . '_text'] = self::yesNoText($diagnosis[$f]); + } + } + + return $diagnosis; + } + + /** + * 构建 type_value => [value => name] 的两级查询映射 + * + * @param array $types + * @return array + */ + private static function buildDictMap(array $types): array + { + if (empty($types)) { + return []; + } + $rows = DictData::whereIn('type_value', $types) + ->field(['type_value', 'value', 'name']) + ->select() + ->toArray(); + $map = []; + foreach ($rows as $r) { + $tv = (string) ($r['type_value'] ?? ''); + $v = (string) ($r['value'] ?? ''); + $n = (string) ($r['name'] ?? ''); + if ($tv === '' || $v === '') { + continue; + } + $map[$tv][$v] = $n; + } + return $map; + } + + /** + * 找不到字典项时回显原值(避免空白) + */ + private static function dictLabel(array $dictMap, string $type, $value): string + { + if ($value === null || $value === '') { + return ''; + } + $key = (string) $value; + return $dictMap[$type][$key] ?? $key; + } + + private static function genderText(int $gender): string + { + if ($gender === 1) return '男'; + if ($gender === 0) return '女'; + return ''; + } + + private static function maritalText($v): string + { + if ($v === null || $v === '') return ''; + $n = (int) $v; + if ($n === 0) return '未婚'; + if ($n === 1) return '已婚'; + if ($n === 2) return '离异'; + return ''; + } + + private static function yesNoText($v): string + { + if ($v === null || $v === '') return ''; + return ((int) $v) === 1 ? '有' : '无'; + } + + /** + * @notes 通知接诊医助(按诊单 assistant_id 查企微 userid 后发应用消息) + * 文案固定:马上面诊到你对应的患者了,请联系患者进入诊室等待。 + * @param int $appointmentId + * @return array{ok: bool, message?: string} + */ + public static function notifyAssistant(int $appointmentId): array + { + try { + $appointment = Appointment::findOrEmpty($appointmentId); + if ($appointment->isEmpty()) { + return ['ok' => false, 'message' => '挂号记录不存在']; + } + + $diagnosis = Diagnosis::where('id', (int) $appointment->patient_id)->find(); + if (!$diagnosis) { + return ['ok' => false, 'message' => '未找到对应的诊单']; + } + $assistantId = (int) ($diagnosis->assistant_id ?? 0); + if ($assistantId <= 0) { + return ['ok' => false, 'message' => '该患者尚未指派医助']; + } + + $assistant = Admin::whereNull('delete_time')->find($assistantId); + if (!$assistant) { + return ['ok' => false, 'message' => '医助账号不存在']; + } + $wxId = trim((string) ($assistant->work_wechat_userid ?? '')); + if ($wxId === '') { + Log::warning("接诊台通知医助跳过:医助 admin_id={$assistantId} 未绑定 work_wechat_userid"); + return [ + 'ok' => false, + 'message' => '该医助未绑定企业微信账号,无法推送消息(请其在后台「扫码绑定企业微信」后再试)', + ]; + } + + $patientName = (string) ($diagnosis->patient_name ?? '患者'); + $text = "【接诊通知】马上面诊到你对应的患者了,请联系患者进入诊室等待。\n患者:{$patientName}\n时间:" . (string) $appointment->appointment_date . ' ' . (string) $appointment->appointment_time; + + $result = WechatWorkAppMessageService::sendTextToUser($wxId, $text); + if (empty($result['ok'])) { + Log::warning('接诊台通知医助失败:' . ($result['message'] ?? '')); + } + return $result; + } catch (\Throwable $e) { + Log::error('接诊台通知医助异常:' . $e->getMessage()); + return ['ok' => false, 'message' => '企业微信通知异常:' . $e->getMessage()]; + } + } } diff --git a/server/app/adminapi/logic/doctor/DoctorNoteLogic.php b/server/app/adminapi/logic/doctor/DoctorNoteLogic.php new file mode 100644 index 00000000..bbfd10e4 --- /dev/null +++ b/server/app/adminapi/logic/doctor/DoctorNoteLogic.php @@ -0,0 +1,121 @@ +<?php + +namespace app\adminapi\logic\doctor; + +use app\common\logic\BaseLogic; +use app\common\model\doctor\DoctorNote; + +class DoctorNoteLogic extends BaseLogic +{ + /** + * 按 diagnosis_id + 当天 find-or-create,追加 content / tongue_images + */ + public static function addOrAppend(array $params): bool + { + try { + $diagnosisId = (int) $params['diagnosis_id']; + $doctorId = (int) ($params['doctor_id'] ?? 0); + $today = date('Y-m-d'); + $time = date('H:i'); + + $existing = DoctorNote::where('diagnosis_id', $diagnosisId) + ->where('note_date', $today) + ->whereNull('delete_time') + ->find(); + + $newContent = trim($params['content'] ?? ''); + $newImages = $params['tongue_images'] ?? []; + if (is_string($newImages)) { + $newImages = json_decode($newImages, true) ?: []; + } + + if ($existing) { + $data = []; + + if ($newContent !== '') { + $prev = trim($existing->content ?? ''); + $line = "[{$time}] {$newContent}"; + $data['content'] = $prev !== '' ? ($prev . "\n" . $line) : $line; + } + + if (!empty($newImages)) { + $prev = $existing->tongue_images; + if (is_string($prev)) { + $prev = json_decode($prev, true) ?: []; + } + if (!is_array($prev)) { + $prev = []; + } + $merged = array_values(array_unique(array_merge($prev, $newImages))); + if (count($merged) > 9) { + $merged = array_slice($merged, 0, 9); + } + $data['tongue_images'] = json_encode($merged, JSON_UNESCAPED_UNICODE); + } + + if (!empty($data)) { + $existing->save($data); + } + } else { + $content = $newContent !== '' ? "[{$time}] {$newContent}" : ''; + DoctorNote::create([ + 'diagnosis_id' => $diagnosisId, + 'doctor_id' => $doctorId, + 'note_date' => $today, + 'content' => $content, + 'tongue_images' => !empty($newImages) + ? json_encode($newImages, JSON_UNESCAPED_UNICODE) + : null, + ]); + } + + return true; + } catch (\Exception $e) { + self::setError($e->getMessage()); + return false; + } + } + + /** + * 按 diagnosis_id 获取备注列表(note_date DESC) + */ + public static function getByDiagnosis(int $diagnosisId, int $limit = 30): array + { + try { + if ($diagnosisId <= 0) { + return []; + } + + $records = DoctorNote::where('diagnosis_id', $diagnosisId) + ->whereNull('delete_time') + ->order('note_date', 'desc') + ->limit($limit) + ->select() + ->toArray(); + + $domain = request()->domain(); + + foreach ($records as &$record) { + $images = $record['tongue_images'] ?? []; + if (is_string($images)) { + $images = json_decode($images, true) ?: []; + } + if (!is_array($images)) { + $images = []; + } + $record['tongue_images'] = array_map(function ($url) use ($domain) { + if (empty($url)) return $url; + if (stripos($url, 'http://') === 0 || stripos($url, 'https://') === 0) { + return $url; + } + return $domain . '/' . $url; + }, $images); + } + + return $records; + } catch (\Exception $e) { + self::setError($e->getMessage()); + return []; + } + } +} diff --git a/server/app/adminapi/validate/doctor/AppointmentValidate.php b/server/app/adminapi/validate/doctor/AppointmentValidate.php index 63eb3fd9..7956a79a 100644 --- a/server/app/adminapi/validate/doctor/AppointmentValidate.php +++ b/server/app/adminapi/validate/doctor/AppointmentValidate.php @@ -19,6 +19,7 @@ class AppointmentValidate extends BaseValidate 'id' => 'require', 'patient_id' => 'require|integer', 'doctor_id' => 'require|integer', + 'diagnosis_id' => 'require|integer', 'appointment_date' => 'require|date', 'period' => 'in:morning,afternoon,all', 'appointment_time' => 'require', @@ -34,6 +35,7 @@ class AppointmentValidate extends BaseValidate 'id' => '预约ID', 'patient_id' => '患者ID', 'doctor_id' => '医生ID', + 'diagnosis_id' => '诊单ID', 'appointment_date' => '预约日期', 'period' => '时段', 'appointment_time' => '预约时间', @@ -85,4 +87,32 @@ class AppointmentValidate extends BaseValidate { return $this->only(['id']); } + + /** + * @notes 接诊台聚合详情场景 + * @return AppointmentValidate + */ + public function sceneReception() + { + return $this->only(['id']); + } + + /** + * @notes 通知接诊医助场景 + * @return AppointmentValidate + */ + public function sceneNotifyAssistant() + { + return $this->only(['id']); + } + + public function sceneAddDoctorNote() + { + return $this->only(['diagnosis_id']); + } + + public function sceneDoctorNotes() + { + return $this->only(['diagnosis_id']); + } } diff --git a/server/app/common/model/doctor/DoctorNote.php b/server/app/common/model/doctor/DoctorNote.php new file mode 100644 index 00000000..92e94901 --- /dev/null +++ b/server/app/common/model/doctor/DoctorNote.php @@ -0,0 +1,17 @@ +<?php + +namespace app\common\model\doctor; + +use app\common\model\BaseModel; + +class DoctorNote extends BaseModel +{ + protected $name = 'doctor_note'; + + protected $autoWriteTimestamp = true; + protected $createTime = 'create_time'; + protected $updateTime = 'update_time'; + protected $deleteTime = 'delete_time'; + + protected $dateFormat = false; +} diff --git a/server/sql/1.9.20260421/add_doctor_note_table.sql b/server/sql/1.9.20260421/add_doctor_note_table.sql new file mode 100644 index 00000000..e11f290b --- /dev/null +++ b/server/sql/1.9.20260421/add_doctor_note_table.sql @@ -0,0 +1,16 @@ +-- 医生接诊备注表(按天一条,多次追加更新) + +CREATE TABLE IF NOT EXISTS `zyt_doctor_note` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `diagnosis_id` int(11) unsigned NOT NULL COMMENT '诊单ID (tcm_diagnosis.id)', + `doctor_id` int(11) unsigned NOT NULL DEFAULT 0 COMMENT '医生ID (system_admin.id)', + `note_date` date NOT NULL COMMENT '记录日期', + `content` text DEFAULT NULL COMMENT '备注文字(多次追加以换行分隔,带时间戳前缀)', + `tongue_images` json DEFAULT NULL COMMENT '舌苔/截屏照片路径数组', + `create_time` int(10) unsigned NOT NULL DEFAULT 0, + `update_time` int(10) unsigned NOT NULL DEFAULT 0, + `delete_time` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `uk_diagnosis_date` (`diagnosis_id`, `note_date`), + KEY `idx_doctor` (`doctor_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='医生接诊备注'; diff --git a/server/sql/1.9.20260421/add_patient_reception_menu.sql b/server/sql/1.9.20260421/add_patient_reception_menu.sql new file mode 100644 index 00000000..88b8e522 --- /dev/null +++ b/server/sql/1.9.20260421/add_patient_reception_menu.sql @@ -0,0 +1,23 @@ +-- 患者管理(一级目录) + 接诊台(二级菜单) + 查看 / 完成接诊 两个按钮权限 + +INSERT INTO `zyt_system_menu` +(`pid`, `type`, `name`, `icon`, `sort`, `perms`, `paths`, `component`, `selected`, `params`, `is_show`, `is_disable`, `create_time`, `update_time`) +VALUES +(0, 'M', '患者管理', 'el-icon-User', 95, '', '/patient', '', '', '', 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()); + +SET @patient_pid = LAST_INSERT_ID(); + +INSERT INTO `zyt_system_menu` +(`pid`, `type`, `name`, `icon`, `sort`, `perms`, `paths`, `component`, `selected`, `params`, `is_show`, `is_disable`, `create_time`, `update_time`) +VALUES +(@patient_pid, 'C', '接诊台', '', 1, 'doctor.appointment/lists', 'reception', 'patient/reception/index', '', '', 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()); + +SET @reception_menu_id = LAST_INSERT_ID(); + +INSERT INTO `zyt_system_menu` +(`pid`, `type`, `name`, `icon`, `sort`, `perms`, `paths`, `component`, `selected`, `params`, `is_show`, `is_disable`, `create_time`, `update_time`) +VALUES +(@reception_menu_id, 'A', '查看', '', 1, 'doctor.appointment/reception', '', '', '', '', 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()), +(@reception_menu_id, 'A', '完成接诊', '', 2, 'doctor.appointment/complete', '', '', '', '', 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()), +(@reception_menu_id, 'A', '编辑病历', '', 3, 'tcm.diagnosis/edit', '', '', '', '', 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()), +(@reception_menu_id, 'A', '备注', '', 4, 'doctor.appointment/addDoctorNote', '', '', '', '', 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()); diff --git a/ui-project/untitled.pen b/ui-project/untitled.pen new file mode 100644 index 00000000..03aa4e9c --- /dev/null +++ b/ui-project/untitled.pen @@ -0,0 +1,1011 @@ +{ + "version": "2.11", + "children": [ + { + "type": "frame", + "id": "bi8Au", + "x": 0, + "y": 0, + "name": "Frame", + "clip": true, + "width": 1440, + "height": 1280, + "fill": "$bg", + "layout": "vertical", + "gap": 20, + "padding": [ + 24, + 24, + 28, + 24 + ], + "children": [ + { + "type": "frame", + "id": "N9881", + "name": "header1", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "hZlyc", + "name": "headerLeft1", + "layout": "vertical", + "gap": 6, + "children": [ + { + "type": "text", + "id": "i2yrnT", + "name": "headerEyebrow1", + "fill": "$accent", + "content": "TCM CONSULTATION DESK", + "fontFamily": "$font-data", + "fontSize": 12, + "fontWeight": "500", + "letterSpacing": 0.08 + }, + { + "type": "text", + "id": "ddJRm", + "name": "headerTitle1", + "fill": "$ink", + "content": "今日待接诊", + "fontFamily": "$font-heading", + "fontSize": 30, + "fontWeight": "700" + }, + { + "type": "text", + "id": "zQYLh", + "name": "headerDesc1", + "fill": "$muted", + "content": "仅显示今天状态为待接诊的患者队列,左侧选人,右侧处理。", + "fontFamily": "$font-body", + "fontSize": 14, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "cRVHf", + "name": "headerMeta1", + "fill": "$muted", + "content": "2026-04-29 周三", + "fontFamily": "IBM Plex Mono", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "PoApq", + "name": "headerRight1", + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "G1buhl", + "name": "livePill1", + "fill": "$surface", + "cornerRadius": 16, + "stroke": { + "align": "inside", + "thickness": 1, + "fill": "$line" + }, + "gap": 8, + "padding": [ + 10, + 14 + ], + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "hLADD", + "name": "liveDot1", + "fill": "$success", + "width": 8, + "height": 8 + }, + { + "type": "text", + "id": "X6yXq", + "name": "liveText1", + "fill": "$ink", + "content": "实时刷新 20s", + "fontFamily": "$font-data", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "Y1Nz2r", + "name": "refreshBtn1", + "fill": "$accent-soft", + "cornerRadius": 16, + "gap": 8, + "padding": [ + 10, + 14 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "B9uYq", + "name": "refreshText1", + "fill": "$accent", + "content": "手动刷新", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "600" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "jzlvR", + "name": "filterShell1", + "width": "fill_container", + "fill": "$surface", + "cornerRadius": 12, + "stroke": { + "align": "inside", + "thickness": 1, + "fill": "$line" + }, + "layout": "vertical", + "gap": 12, + "padding": [ + 12, + 16 + ], + "children": [ + { + "type": "frame", + "id": "b1JZpo", + "name": "filterTop1", + "width": "fill_container", + "gap": 12, + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "wkJ6p", + "name": "searchBox1", + "width": 280, + "fill": "#FFFFFF", + "cornerRadius": 6, + "stroke": { + "align": "inside", + "thickness": 1, + "fill": "#DCDFE6" + }, + "padding": [ + 10, + 12 + ], + "children": [ + { + "type": "text", + "id": "JkuqL", + "name": "searchText1", + "fill": "#909399", + "content": "请输入患者姓名", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "text", + "id": "mTW9F", + "name": "filterHint1", + "fill": "#909399", + "content": "仅显示 今日待接诊 · 未开方 患者", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "MJP3r", + "name": "mainArea1", + "width": "fill_container", + "height": "fill_container", + "gap": 14, + "children": [ + { + "type": "frame", + "id": "D4iwi", + "name": "queueCol1", + "width": 270, + "height": "fill_container", + "layout": "vertical", + "gap": 18, + "children": [ + { + "type": "frame", + "id": "fPiHt", + "name": "queuePanel1", + "width": "fill_container", + "height": "fill_container", + "fill": "$surface", + "cornerRadius": 12, + "stroke": { + "align": "inside", + "thickness": 1, + "fill": "$line" + }, + "layout": "vertical", + "gap": 10, + "padding": 12, + "children": [ + { + "type": "frame", + "id": "c4GLym", + "name": "queueHead1", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "U67w2R", + "name": "queueTitle1", + "fill": "$ink", + "content": "待接诊队列", + "fontFamily": "Geist", + "fontSize": 15, + "fontWeight": "700" + }, + { + "type": "text", + "id": "cLBoV", + "name": "queueMeta1", + "fill": "$muted", + "content": "18 人", + "fontFamily": "IBM Plex Mono", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "Vy2l6", + "name": "rowA1", + "width": "fill_container", + "fill": "#F5F7FA", + "cornerRadius": 6, + "stroke": { + "align": "inside", + "thickness": 1, + "fill": "#409EFF" + }, + "padding": 10, + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "R8gOpa", + "name": "rowAName1", + "fill": "#303133", + "textGrowth": "fixed-width", + "width": 150, + "content": "王桂芳 女 54岁\n09:30 · 医助 李晴", + "lineHeight": 1.35, + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "600" + }, + { + "type": "icon_font", + "id": "h3Iix", + "width": 18, + "height": 18, + "iconFontName": "phone", + "iconFontFamily": "lucide", + "fill": "$accent" + } + ] + }, + { + "type": "frame", + "id": "QmenJ", + "name": "rowB1", + "width": "fill_container", + "fill": "#FFFFFF", + "cornerRadius": 6, + "stroke": { + "align": "inside", + "thickness": 1, + "fill": "#EBEEF5" + }, + "padding": 10, + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "FIO8H", + "name": "rowBName1", + "fill": "#303133", + "textGrowth": "fixed-width", + "width": 150, + "content": "陈建国 男 47岁\n10:00 · 医助 李晴", + "lineHeight": 1.35, + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "600" + }, + { + "type": "icon_font", + "id": "WZsvR", + "width": 18, + "height": 18, + "iconFontName": "phone", + "iconFontFamily": "lucide", + "fill": "$accent" + } + ] + }, + { + "type": "frame", + "id": "GsbWq", + "name": "rowC1", + "width": "fill_container", + "fill": "#FFFFFF", + "cornerRadius": 6, + "stroke": { + "align": "inside", + "thickness": 1, + "fill": "#EBEEF5" + }, + "padding": 10, + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "aHKbK", + "name": "rowCName1", + "fill": "#303133", + "textGrowth": "fixed-width", + "width": 150, + "content": "刘晓燕 女 61岁\n10:40 · 医助 王敏", + "lineHeight": 1.35, + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "600" + }, + { + "type": "icon_font", + "id": "zvZNE", + "width": 18, + "height": 18, + "iconFontName": "phone", + "iconFontFamily": "lucide", + "fill": "$accent" + } + ] + }, + { + "type": "text", + "id": "oqtIP", + "name": "queueHint1", + "fill": "#909399", + "content": "点击电话发起通话", + "fontFamily": "IBM Plex Mono", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "eIUBi", + "name": "sidebar1", + "width": "fill_container", + "height": "fill_container", + "layout": "vertical", + "gap": 18, + "children": [ + { + "type": "frame", + "id": "o7d0x", + "name": "sidebarTop1", + "width": "fill_container", + "fill": "$surface", + "cornerRadius": 12, + "stroke": { + "align": "inside", + "thickness": 1, + "fill": "$line" + }, + "layout": "vertical", + "gap": 10, + "padding": 16, + "children": [ + { + "type": "text", + "id": "VzC2H", + "name": "patientCardTitle1", + "fill": "#303133", + "content": "患者信息", + "fontFamily": "Geist", + "fontSize": 16, + "fontWeight": "700" + }, + { + "type": "frame", + "id": "U6ehR", + "name": "patientHero1", + "width": "fill_container", + "fill": "#F5F7FA", + "cornerRadius": 8, + "stroke": { + "align": "inside", + "thickness": 1, + "fill": "#EBEEF5" + }, + "layout": "vertical", + "gap": 6, + "padding": 12, + "children": [ + { + "type": "text", + "id": "xE8jJ", + "name": "patientName1", + "fill": "#303133", + "content": "王桂芳", + "fontFamily": "Geist", + "fontSize": 24, + "fontWeight": "700" + }, + { + "type": "text", + "id": "DpFh8", + "name": "patientMeta1", + "fill": "#606266", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "138****2981 · 女 · 54岁\n162cm / 61kg · 江苏苏州\n预约:09:30 · 上午\n医生:张医生 医助:李晴\n状态:待接诊 · 未开方\n备注:空腹血糖偏高,需优先接诊", + "lineHeight": 1.5, + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "HjFMA", + "name": "sidebarBottom1", + "width": "fill_container", + "height": "fill_container", + "fill": "$surface", + "cornerRadius": 12, + "stroke": { + "align": "inside", + "thickness": 1, + "fill": "$line" + }, + "layout": "vertical", + "gap": 14, + "padding": 16, + "children": [ + { + "type": "text", + "id": "cVR2V", + "name": "caseTitle1", + "fill": "$ink", + "content": "患者病例", + "fontFamily": "Geist", + "fontSize": 16, + "fontWeight": "700" + }, + { + "type": "frame", + "id": "e6zlH", + "name": "casePaper1", + "width": "fill_container", + "fill": "#FFFFFF", + "cornerRadius": 8, + "stroke": { + "align": "inside", + "thickness": 1, + "fill": "#EBEEF5" + }, + "layout": "vertical", + "gap": 10, + "padding": 14, + "children": [ + { + "type": "text", + "id": "uEc2r", + "name": "caseMeta1", + "fill": "#909399", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "初诊 | 诊断日期 2026-04-29 | 诊断类型 消渴 | 证型 气阴两虚", + "fontFamily": "IBM Plex Mono", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "DFXeR", + "name": "chiefLabel1", + "fill": "$ink", + "content": "主诉", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "700" + }, + { + "type": "text", + "id": "r7shaE", + "name": "chiefBody1", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "近两周空腹血糖波动明显,晨起口干,夜间睡眠浅,偶有双足麻木。", + "lineHeight": 1.55, + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "VwDkg", + "name": "historyLabel1", + "fill": "$ink", + "content": "现病史 / 既往史", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "700" + }, + { + "type": "text", + "id": "jjxKR", + "name": "historyBody1", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "2 型糖尿病 8 年,高血压病史 5 年。近 3 月空腹血糖多在 8.5-10.2 mmol/L 波动,近期饮食控制一般。", + "lineHeight": 1.55, + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "AxVdf", + "name": "zhLabel1", + "fill": "$ink", + "content": "中医四诊与辨证", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "700" + }, + { + "type": "text", + "id": "m0WNl1", + "name": "zhBody1", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "舌苔:薄黄\n脉象:细数\n治则:益气养阴,和胃生津", + "lineHeight": 1.55, + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "hyTrH", + "name": "rxLabel1", + "fill": "$ink", + "content": "处方意见", + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "700" + }, + { + "type": "text", + "id": "DKf9G", + "name": "rxBody1", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "当前未开方。建议先完成问诊沟通,确认近期餐后血糖、睡眠与饮食依从性后再定方。", + "lineHeight": 1.55, + "fontFamily": "Geist", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "text", + "id": "J6aHmf", + "name": "metricTitle1", + "fill": "$ink", + "content": "血糖血压记录", + "fontFamily": "Geist", + "fontSize": 16, + "fontWeight": "700" + }, + { + "type": "text", + "id": "lD3mp", + "name": "metricHint2", + "fill": "#909399", + "content": "左右滑动查看全部字段", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "A53BJm", + "name": "metricViewport2", + "clip": true, + "width": "fill_container", + "height": 338, + "fill": "#FFFFFF", + "cornerRadius": 8, + "stroke": { + "align": "inside", + "thickness": 1, + "fill": "#EBEEF5" + }, + "layout": "none", + "children": [ + { + "type": "frame", + "id": "BE0mt", + "x": 0, + "y": 0, + "name": "metricInner2", + "width": 1180, + "fill": "#FFFFFF", + "layout": "vertical", + "gap": 8, + "padding": 12, + "children": [ + { + "type": "text", + "id": "YCrvH", + "name": "metricHead3", + "fill": "$ink", + "textGrowth": "fixed-width", + "width": 1160, + "content": "记录日期 记录时间 空腹血糖(mmol/L) 餐后2小时血糖(mmol/L) 其他血糖(mmol/L) 血压(mmHg) 西药 胰岛素 备注", + "fontFamily": "IBM Plex Mono", + "fontSize": 12, + "fontWeight": "700" + }, + { + "type": "text", + "id": "BJkw7", + "name": "metricRowA", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": 1160, + "content": "2026-04-29 — 4.8 — — — — — —", + "fontFamily": "IBM Plex Mono", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "bIZua", + "name": "metricRowB", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": 1160, + "content": "2026-04-28 — 6.1 6 — — — — —", + "fontFamily": "IBM Plex Mono", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "WUcgG", + "name": "metricRowC", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": 1160, + "content": "2026-04-27 — 4.9 6.5 — — — — —", + "fontFamily": "IBM Plex Mono", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "GmPCh", + "name": "metricRowD", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": 1160, + "content": "2026-04-26 — 5.4 5.9 — — — — —", + "fontFamily": "IBM Plex Mono", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "MeXjg", + "name": "metricRowE", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": 1160, + "content": "2026-04-25 — 4.8 8.2 — — — — 减半片达格列净", + "fontFamily": "IBM Plex Mono", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "M1Aox", + "name": "metricRowF", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": 1160, + "content": "2026-04-24 — 6 — — — — — —", + "fontFamily": "IBM Plex Mono", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "Pz6rl", + "name": "metricRowG", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": 1160, + "content": "2026-04-23 — 5 6.2 — — — — —", + "fontFamily": "IBM Plex Mono", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "Cbd0d", + "name": "metricRowH", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": 1160, + "content": "2026-04-21 — 5.2 — — — — — —", + "fontFamily": "IBM Plex Mono", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "gEy4w", + "name": "metricRowI", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": 1160, + "content": "2026-04-20 — 6.1 5.4 — — — — —", + "fontFamily": "IBM Plex Mono", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "fHVsn", + "name": "metricRowJ", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": 1160, + "content": "2026-04-19 — 5.9 5.7 — — 达格列净早一片,沙格列汀二甲双胍缓释...", + "fontFamily": "IBM Plex Mono", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "GOeP1", + "name": "metricNote2", + "fill": "#909399", + "textGrowth": "fixed-width", + "width": 1160, + "content": "已展示全部录入记录,字段与编辑诊单中的血糖血压记录保持一致。", + "fontFamily": "Geist", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "rectangle", + "cornerRadius": 4, + "id": "uSMS9", + "x": 20, + "y": 318, + "name": "scrollTrack2", + "fill": "#EBEEF5", + "width": 220, + "height": 4 + }, + { + "type": "rectangle", + "cornerRadius": 4, + "id": "La8Dq", + "x": 20, + "y": 318, + "name": "scrollThumb2", + "fill": "#C0C4CC", + "width": 96, + "height": 4 + } + ] + } + ] + }, + { + "type": "frame", + "id": "V2cCA5", + "layoutPosition": "absolute", + "x": 980, + "y": 648, + "name": "floatFinish1", + "fill": "$success", + "cornerRadius": 20, + "stroke": { + "align": "inside", + "thickness": 1, + "fill": "#FFFFFF66" + }, + "effect": [ + { + "type": "shadow", + "shadowType": "outer", + "color": "#67C23A26", + "offset": { + "x": 0, + "y": 10 + }, + "blur": 24 + }, + { + "type": "shadow", + "shadowType": "outer", + "color": "#30313314", + "offset": { + "x": 0, + "y": 3 + }, + "blur": 8 + } + ], + "padding": [ + 14, + 20 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "s3lzTi", + "name": "floatFinishText1", + "fill": "$surface", + "content": "完成接诊", + "fontFamily": "Geist", + "fontSize": 14, + "fontWeight": "700" + } + ] + } + ] + } + ] + } + ] + } + ], + "variables": { + "accent": { + "type": "color", + "value": "#409EFF" + }, + "accent-soft": { + "type": "color", + "value": "#ECF5FF" + }, + "bg": { + "type": "color", + "value": "#F5F7FA" + }, + "danger": { + "type": "color", + "value": "#F56C6C" + }, + "danger-soft": { + "type": "color", + "value": "#FEF0F0" + }, + "font-body": { + "type": "string", + "value": "Geist" + }, + "font-data": { + "type": "string", + "value": "IBM Plex Mono" + }, + "font-heading": { + "type": "string", + "value": "Geist" + }, + "info": { + "type": "color", + "value": "#909399" + }, + "info-soft": { + "type": "color", + "value": "#F4F4F5" + }, + "ink": { + "type": "color", + "value": "#303133" + }, + "line": { + "type": "color", + "value": "#EBEEF5" + }, + "muted": { + "type": "color", + "value": "#606266" + }, + "success": { + "type": "color", + "value": "#67C23A" + }, + "success-soft": { + "type": "color", + "value": "#F0F9EB" + }, + "surface": { + "type": "color", + "value": "#FFFFFF" + }, + "surface-strong": { + "type": "color", + "value": "#F5F7FA" + }, + "warn": { + "type": "color", + "value": "#E6A23C" + }, + "warn-soft": { + "type": "color", + "value": "#FDF6EC" + } + } +} \ No newline at end of file